58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
// 统一错误处理中间件
|
|
const errorHandler = (err, req, res, next) => {
|
|
console.error('Error:', err);
|
|
|
|
// JWT 错误
|
|
if (err.name === 'JsonWebTokenError') {
|
|
return res.status(401).json({
|
|
success: false,
|
|
error: 'Invalid token',
|
|
code: 'INVALID_TOKEN'
|
|
});
|
|
}
|
|
|
|
if (err.name === 'TokenExpiredError') {
|
|
return res.status(401).json({
|
|
success: false,
|
|
error: 'Token expired',
|
|
code: 'TOKEN_EXPIRED'
|
|
});
|
|
}
|
|
|
|
// Multer 文件上传错误
|
|
if (err.code === 'LIMIT_FILE_SIZE') {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'File too large',
|
|
code: 'FILE_TOO_LARGE'
|
|
});
|
|
}
|
|
|
|
if (err.code === 'LIMIT_FILE_COUNT') {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Too many files',
|
|
code: 'TOO_MANY_FILES'
|
|
});
|
|
}
|
|
|
|
// 数据库错误
|
|
if (err.code === 'SQLITE_CONSTRAINT') {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Data constraint violation',
|
|
code: 'CONSTRAINT_VIOLATION'
|
|
});
|
|
}
|
|
|
|
// 默认错误
|
|
const statusCode = err.statusCode || 500;
|
|
res.status(statusCode).json({
|
|
success: false,
|
|
error: err.message || 'Internal server error',
|
|
code: err.code || 'INTERNAL_ERROR'
|
|
});
|
|
};
|
|
|
|
module.exports = errorHandler;
|