app2-api/middlewares/error.js

59 lines
1.3 KiB
JavaScript
Raw Normal View History

2019-04-15 10:13:17 +00:00
'use strict';
const httpStatus = require('http-status');
const expressValidation = require('express-validation');
2019-04-15 16:00:27 +00:00
const APIError = require('./APIError');
2019-04-15 10:13:17 +00:00
/**
* Error handler. Send stacktrace only during development
* @public
*/
const handler = (err, req, res, next) => {
const response = {
code: err.status,
message: err.message || httpStatus[err.status],
errors: err.errors,
stack: err.stack,
};
res.status(err.status);
res.json(response);
};
exports.handler = handler;
/**
* If error is not an instanceOf APIError, convert it.
* @public
*/
exports.converter = (err, req, res, next) => {
let convertedError = err;
if (err instanceof expressValidation.ValidationError) {
convertedError = new APIError({
message: 'Error de validación',
errors: err.errors,
status: err.status,
stack: err.stack,
});
} else if (!(err instanceof APIError)) {
convertedError = new APIError({
message: err.message,
status: err.status,
stack: err.stack,
});
}
return handler(convertedError, req, res);
};
/**
* Catch 404 and forward to error handler
* @public
*/
exports.notFound = (req, res, next) => {
const err = new APIError({
message: 'Not found',
status: httpStatus.NOT_FOUND,
});
return handler(err, req, res);
};