From 84bf60ca78a2ebfc1061aabef4097469879d789f Mon Sep 17 00:00:00 2001 From: Mateusz Kwasniewski Date: Wed, 12 Apr 2023 08:05:34 +0200 Subject: [PATCH] feat: Catch all error handler (#3499) --- src/lib/app.ts | 3 +++ src/lib/middleware/catch-all-error-handler.ts | 12 ++++++++++++ src/lib/routes/util.ts | 2 ++ 3 files changed, 17 insertions(+) create mode 100644 src/lib/middleware/catch-all-error-handler.ts diff --git a/src/lib/app.ts b/src/lib/app.ts index 4fab348add..2d240488e8 100644 --- a/src/lib/app.ts +++ b/src/lib/app.ts @@ -27,6 +27,7 @@ import patMiddleware from './middleware/pat-middleware'; import { Knex } from 'knex'; import maintenanceMiddleware from './middleware/maintenance-middleware'; import { unless } from './middleware/unless-middleware'; +import { catchAllErrorHandler } from './middleware/catch-all-error-handler'; export default async function getApp( config: IUnleashConfig, @@ -174,6 +175,8 @@ export default async function getApp( if (process.env.NODE_ENV !== 'production') { app.use(errorHandler()); + } else { + app.use(catchAllErrorHandler(config.getLogger)); } app.get(`${baseUriPath}`, (req, res) => { diff --git a/src/lib/middleware/catch-all-error-handler.ts b/src/lib/middleware/catch-all-error-handler.ts new file mode 100644 index 0000000000..3b8c18b4c5 --- /dev/null +++ b/src/lib/middleware/catch-all-error-handler.ts @@ -0,0 +1,12 @@ +import { ErrorRequestHandler } from 'express'; +import { LogProvider } from '../logger'; +import { handleErrors } from '../routes/util'; + +export const catchAllErrorHandler = ( + logProvider: LogProvider, +): ErrorRequestHandler => { + const logger = logProvider('/debug-error-handler.ts'); + return (err, req, res) => { + handleErrors(res, logger, err); + }; +}; diff --git a/src/lib/routes/util.ts b/src/lib/routes/util.ts index b37db9b1d4..25ca60611a 100644 --- a/src/lib/routes/util.ts +++ b/src/lib/routes/util.ts @@ -40,6 +40,8 @@ export const handleErrors: ( return res.status(400).json(error).end(); case 'BadDataError': return res.status(400).json(error).end(); + case 'BadRequestError': + return res.status(400).json(error).end(); case 'OwaspValidationError': return res.status(400).json(error).end(); case 'PasswordUndefinedError':