保险前后端,养殖端和保险端小程序

This commit is contained in:
xuqiuyun
2025-09-17 19:01:52 +08:00
parent e4287b83fe
commit 473891163c
218 changed files with 109331 additions and 14103 deletions

View File

@@ -0,0 +1,101 @@
/**
* API统一中间件
* 处理所有API请求的统一格式和错误处理
*/
const { buildSuccessResponse, buildErrorResponse, handlePagination, handleFilters, handleSorting } = require('../config/api-config');
/**
* API请求统一处理中间件
* @param {Object} req - Express请求对象
* @param {Object} res - Express响应对象
* @param {Function} next - 下一个中间件
*/
const apiMiddleware = (req, res, next) => {
// 记录请求日志
console.log(`[API] ${req.method} ${req.originalUrl}`, {
query: req.query,
body: req.body,
params: req.params
});
// 添加统一的响应方法
res.apiSuccess = (data = null, message = '操作成功', options = {}) => {
buildSuccessResponse(res, data, message, options);
};
res.apiError = (message = '操作失败', code = 'UNKNOWN_ERROR', statusCode = 500) => {
buildErrorResponse(res, message, code, statusCode);
};
// 添加分页处理方法
req.getPagination = () => handlePagination(req);
// 添加筛选条件处理方法
req.getFilters = (allowedFields = []) => handleFilters(req, allowedFields);
// 添加排序处理方法
req.getSorting = (allowedFields = []) => handleSorting(req, allowedFields);
next();
};
/**
* 统一错误处理中间件
* @param {Error} err - 错误对象
* @param {Object} req - 请求对象
* @param {Object} res - 响应对象
* @param {Function} next - 下一个中间件
*/
const errorHandler = (err, req, res, next) => {
console.error('[API Error]', {
message: err.message,
stack: err.stack,
url: req.url,
method: req.method,
body: req.body,
query: req.query
});
// Sequelize数据库错误
if (err.name && err.name.includes('Sequelize')) {
return res.apiError('数据库操作失败', 'DATABASE_ERROR', 500);
}
// 验证错误
if (err.name === 'ValidationError') {
return res.apiError('数据验证失败', 'VALIDATION_ERROR', 400);
}
// JWT认证错误
if (err.name === 'JsonWebTokenError') {
return res.apiError('Token无效', 'INVALID_TOKEN', 401);
}
if (err.name === 'TokenExpiredError') {
return res.apiError('Token已过期', 'TOKEN_EXPIRED', 401);
}
// 默认错误处理
res.apiError(
process.env.NODE_ENV === 'development' ? err.message : '服务器内部错误',
'INTERNAL_ERROR',
500
);
};
/**
* 404处理中间件
* @param {Object} req - 请求对象
* @param {Object} res - 响应对象
* @param {Function} next - 下一个中间件
*/
const notFoundHandler = (req, res, next) => {
res.apiError('接口不存在', 'NOT_FOUND', 404);
};
module.exports = {
apiMiddleware,
errorHandler,
notFoundHandler
};