初始化
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* 全局错误处理中间件
|
||||
*/
|
||||
const errorHandler = (err, req, res, next) => {
|
||||
console.error('错误详情:', err);
|
||||
|
||||
// 默认错误信息
|
||||
let statusCode = 500;
|
||||
let message = 'Internal Server Error';
|
||||
let details = null;
|
||||
|
||||
// 根据错误类型设置状态码和消息
|
||||
if (err.name === 'ValidationError') {
|
||||
statusCode = 400;
|
||||
message = 'Validation Error';
|
||||
details = err.message;
|
||||
} else if (err.name === 'UnauthorizedError') {
|
||||
statusCode = 401;
|
||||
message = 'Unauthorized';
|
||||
} else if (err.name === 'ForbiddenError') {
|
||||
statusCode = 403;
|
||||
message = 'Forbidden';
|
||||
} else if (err.name === 'NotFoundError') {
|
||||
statusCode = 404;
|
||||
message = 'Not Found';
|
||||
} else if (err.code === 'ENOTFOUND') {
|
||||
statusCode = 503;
|
||||
message = 'Service Unavailable';
|
||||
details = 'Network connection failed';
|
||||
} else if (err.code === 'ECONNREFUSED') {
|
||||
statusCode = 503;
|
||||
message = 'Service Unavailable';
|
||||
details = 'Connection refused';
|
||||
} else if (err.response) {
|
||||
// Axios 错误
|
||||
statusCode = err.response.status || 500;
|
||||
message = err.response.statusText || 'Request Failed';
|
||||
details = err.response.data;
|
||||
} else if (err.message) {
|
||||
message = err.message;
|
||||
}
|
||||
|
||||
// 构建错误响应
|
||||
const errorResponse = {
|
||||
error: true,
|
||||
message,
|
||||
statusCode,
|
||||
timestamp: new Date().toISOString(),
|
||||
path: req.originalUrl,
|
||||
method: req.method
|
||||
};
|
||||
|
||||
// 在开发环境下添加详细信息
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
errorResponse.details = details;
|
||||
errorResponse.stack = err.stack;
|
||||
}
|
||||
|
||||
res.status(statusCode).json(errorResponse);
|
||||
};
|
||||
|
||||
module.exports = { errorHandler };
|
||||
Reference in New Issue
Block a user