feat: 修改了bug

This commit is contained in:
zhang1106
2026-03-06 13:57:37 +08:00
parent 0bb51ec6ac
commit 0cd0107008
12 changed files with 710 additions and 331 deletions
+69 -30
View File
@@ -1,45 +1,84 @@
/**
* 请求参数验证中间件
* 使用Joi进行参数校验
*/
const validate = (schema, source = 'body') => {
return (req, res, next) => {
return async (req, res, next) => {
const data = source === 'query' ? req.query : req.body;
const { error, value } = schema.validate(data, {
abortEarly: false, // 返回所有错误
stripUnknown: true, // 移除未定义的字段
allowUnknown: source === 'query' // 查询参数允许未知字段
});
try {
let result;
if (schema.validate && typeof schema.validate === 'function') {
if (schema.validate.constructor.name === 'AsyncFunction' ||
schema.validate.length === 1) {
result = await schema.validate(data, {
abortEarly: false,
stripUnknown: true,
allowUnknown: source === 'query'
});
} else {
result = schema.validate(data, {
abortEarly: false,
stripUnknown: true,
allowUnknown: source === 'query'
});
}
} else if (schema.validateAsync) {
result = await schema.validateAsync(data, {
abortEarly: false,
stripUnknown: true,
allowUnknown: source === 'query'
});
} else {
result = schema.validate(data, {
abortEarly: false,
stripUnknown: true,
allowUnknown: source === 'query'
});
}
if (error) {
const errorMessages = error.details.map(detail => ({
field: detail.path.join('.'),
message: detail.message
}));
const { error, value } = result;
return res.status(400).json({
error: '参数验证失败',
details: errorMessages
if (error) {
const errorMessages = error.details.map(detail => ({
field: detail.path.join('.'),
message: detail.message
}));
return res.status(400).json({
error: '参数验证失败',
details: errorMessages
});
}
if (source === 'query') {
req.query = value;
} else {
req.body = value;
}
next();
} catch (error) {
if (error.details) {
const errorMessages = error.details.map(detail => ({
field: detail.path.join('.'),
message: detail.message
}));
return res.status(400).json({
error: '参数验证失败',
details: errorMessages
});
}
console.error('验证中间件错误:', error);
return res.status(500).json({
error: '验证过程发生错误',
message: error.message
});
}
// 将验证后的值替换到请求对象
if (source === 'query') {
req.query = value;
} else {
req.body = value;
}
next();
};
};
// 验证查询参数
const validateQuery = (schema) => validate(schema, 'query');
// 验证请求体
const validateBody = (schema) => validate(schema, 'body');
module.exports = {