diff --git a/server/src/middleware/error-handler.ts b/server/src/middleware/error-handler.ts index e9d6c5a8..b8986c6b 100644 --- a/server/src/middleware/error-handler.ts +++ b/server/src/middleware/error-handler.ts @@ -10,6 +10,9 @@ export function errorHandler( _next: NextFunction, ) { if (err instanceof HttpError) { + if (err.status >= 500) { + (res as any).err = err; + } res.status(err.status).json({ error: err.message, ...(err.details ? { details: err.details } : {}), @@ -26,8 +29,10 @@ export function errorHandler( ? { message: err.message, stack: err.stack, name: err.name } : { raw: err }; - // Attach the real error so pino-http can include it in its response log - res.locals.serverError = errObj; + // Attach the real error so pino-http uses it instead of its generic + // "failed with status code 500" message in the response-complete log + const realError = err instanceof Error ? err : Object.assign(new Error(String(err)), { raw: err }); + (res as any).err = realError; logger.error( { err: errObj, method: req.method, url: req.originalUrl }, diff --git a/server/src/middleware/logger.ts b/server/src/middleware/logger.ts index 8f915b85..2f7da6dd 100644 --- a/server/src/middleware/logger.ts +++ b/server/src/middleware/logger.ts @@ -55,11 +55,7 @@ export const httpLogger = pinoHttp({ customErrorMessage(req, res) { return `${req.method} ${req.url} ${res.statusCode}`; }, - customProps(_req, res) { - const serverError = (res as any).locals?.serverError; - if (serverError) { - return { serverError }; - } + customProps() { return {}; }, });