Files
Genarrative/server-node/src/middleware/errorHandler.ts
2026-04-10 15:37:02 +08:00

55 lines
1.1 KiB
TypeScript

import type { ErrorRequestHandler } from 'express';
import { toHttpError } from '../errors.js';
import {
applyApiResponseHeaders,
buildApiLogContext,
wantsApiEnvelope,
} from '../http.js';
export const errorHandler: ErrorRequestHandler = (
error,
request,
response,
_next,
) => {
const normalizedError = toHttpError(error);
const meta = applyApiResponseHeaders(request, response);
request.log?.error(
{
err: error,
...buildApiLogContext(request, response),
user_id: request.userId ?? null,
status: normalizedError.statusCode,
error_code: normalizedError.code,
},
'request failed',
);
response.status(normalizedError.statusCode);
const errorPayload = {
code: normalizedError.code,
message: normalizedError.message,
...(normalizedError.expose && normalizedError.details !== undefined
? { details: normalizedError.details }
: {}),
};
if (wantsApiEnvelope(request)) {
response.json({
ok: false,
data: null,
error: errorPayload,
meta,
});
return;
}
response.json({
error: errorPayload,
meta,
});
};