This commit is contained in:
2026-04-10 15:37:02 +08:00
parent 161cd32277
commit f19e482c8f
233 changed files with 43987 additions and 5127 deletions

View File

@@ -1,27 +1,54 @@
import type { ErrorRequestHandler } from 'express';
import { HttpError } from '../errors.js';
import { toHttpError } from '../errors.js';
import {
applyApiResponseHeaders,
buildApiLogContext,
wantsApiEnvelope,
} from '../http.js';
export const errorHandler: ErrorRequestHandler = (error, request, response, _next) => {
const statusCode =
error instanceof HttpError ? error.statusCode : 500;
const message =
error instanceof HttpError
? error.message
: '服务器内部错误';
export const errorHandler: ErrorRequestHandler = (
error,
request,
response,
_next,
) => {
const normalizedError = toHttpError(error);
const meta = applyApiResponseHeaders(request, response);
request.log?.error(
{
err: error,
request_id: request.requestId,
...buildApiLogContext(request, response),
user_id: request.userId ?? null,
status: normalizedError.statusCode,
error_code: normalizedError.code,
},
'request failed',
);
response.status(statusCode).json({
error: {
message,
},
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,
});
};