function apiFailMiddleware (req: express.Request, res: express.Response, next: express.NextFunction) {
res.fail = options => {
- const { status = HttpStatusCode.BAD_REQUEST_400, message, title, type, data, instance } = options
+ const { status = HttpStatusCode.BAD_REQUEST_400, message, title, type, data, instance, tags } = options
const extension = new ProblemDocumentExtension({
...data,
})
res.status(status)
- res.setHeader('Content-Type', 'application/problem+json')
+
+ if (!res.headersSent) {
+ res.setHeader('Content-Type', 'application/problem+json')
+ }
const json = new ProblemDocument({
status,
: undefined
}, extension)
- logger.debug('Bad HTTP request.', { json })
+ logger.debug('Bad HTTP request.', { json, tags })
res.json(json)
}
if (next) next()
}
+function handleStaticError (err: any, req: express.Request, res: express.Response, next: express.NextFunction) {
+ const message = err.message || ''
+
+ if (message.includes('ENOENT')) {
+ return res.fail({
+ status: err.status || HttpStatusCode.INTERNAL_SERVER_ERROR_500,
+ message: err.message,
+ type: err.name
+ })
+ }
+
+ return next(err)
+}
+
export {
- apiFailMiddleware
+ apiFailMiddleware,
+ handleStaticError
}