1
This commit is contained in:
@@ -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,
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user