27 lines
798 B
JavaScript
27 lines
798 B
JavaScript
const { getRequestId, logger } = require('../utils/logger');
|
|
|
|
function expressErrorHandler(err, req, res, next) {
|
|
if (res.headersSent) return next(err);
|
|
|
|
const requestedStatus = Number(err?.statusCode || err?.status);
|
|
const status = Number.isInteger(requestedStatus) && requestedStatus >= 400 && requestedStatus <= 599
|
|
? requestedStatus
|
|
: 500;
|
|
|
|
const requestId = getRequestId(req);
|
|
(req.log || logger).error({
|
|
err,
|
|
method: req.method,
|
|
path: req.path || req.originalUrl,
|
|
statusCode: status
|
|
}, 'unhandled request error');
|
|
|
|
return res.status(status).json({
|
|
success: false,
|
|
message: status >= 500 ? '服务器内部错误' : (err?.message || '请求处理失败'),
|
|
...(requestId ? { requestId } : {})
|
|
});
|
|
}
|
|
|
|
module.exports = { expressErrorHandler };
|