UNPKG

tt-express-error-handlers

Version:

Error handler middleware for handling specific error levels in express

49 lines (48 loc) 1.76 kB
"use strict"; 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;