tt-express-error-handlers
Version:
Error handler middleware for handling specific error levels in express
49 lines (48 loc) • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class APIError extends Error {
constructor(message, statusCode, data) {
super(message);
this.statusCode = statusCode;
this.data = data;
}
}
exports.APIError = APIError;
const addErrorHandlerMiddleware = (app, logger) => {
// add middleware in correct order to the app
const apiErrorHandler = (err, req, res, next) => {
if (err instanceof APIError) {
if (logger) {
const reqId = res.getHeader('X-Request-Id');
logger.warn({ message: `ApiErrorHandler caught: ${err.stack}`, id: reqId });
}
res.status(err.statusCode).send(Object.assign({ message: err.message }, err.data));
}
else {
next(err);
}
};
const validationErrorHandler = (err, req, res, next) => {
if (err.status) {
if (logger) {
const reqId = res.getHeader('X-Request-Id');
logger.warn({ message: `ValidationErrorHandler caught: ${err.stack}`, id: reqId });
}
res.status(err.status).send({ message: err.message });
}
else {
next(err);
}
};
const genericErrorHandler = (err, req, res, next) => {
if (logger) {
const reqId = res.getHeader('X-Request-Id');
logger.error({ message: `GenericErrorHandler caught: ${err.stack}`, id: reqId });
}
res.status(500).send({ message: 'Internal server error - the error has been reported internally.' });
};
app.use(apiErrorHandler);
app.use(validationErrorHandler);
app.use(genericErrorHandler);
};
exports.default = addErrorHandlerMiddleware;