const errorHandler = (err, req, res, next) => { console.error('错误详情:', err); // 默认错误信息 let error = { ...err }; error.message = err.message; // MongoDB错误处理 if (err.name === 'CastError') { const message = '资源未找到'; error = { message, statusCode: 404 }; } // MongoDB重复键错误 if (err.code === 11000) { const message = '资源已存在'; error = { message, statusCode: 400 }; } // MongoDB验证错误 if (err.name === 'ValidationError') { const message = Object.values(err.errors).map(val => val.message).join(', '); error = { message, statusCode: 400 }; } // 文件上传错误 if (err.code === 'LIMIT_FILE_SIZE') { const message = '文件大小超出限制'; error = { message, statusCode: 400 }; } // JWT错误 if (err.name === 'JsonWebTokenError') { const message = '无效的访问令牌'; error = { message, statusCode: 401 }; } // JWT过期错误 if (err.name === 'TokenExpiredError') { const message = '访问令牌已过期'; error = { message, statusCode: 401 }; } res.status(error.statusCode || 500).json({ success: false, message: error.message || '服务器内部错误', timestamp: new Date().toISOString(), ...(process.env.NODE_ENV === 'development' && { stack: err.stack }) }); }; module.exports = errorHandler;