使用链验证通过Express Validator检查是否存在可选字段
我正在尝试检查API请求中是否存在可选字段,如果该字段存在,请执行嵌套验证以检查其中是否存在其他两个字段(一个或另一个,或两个都隐式存在)。我正在使用Express Validator尝试完成此任务。
// Sample request body
{
<...>
thresholds: {
min: 3,
max: 5
}
}
// (Attempted) validation chain
check('thresholds').optional()
.custom( innerBody => {
console.log('THRESHOLDS', innerBody);
oneOf([
check('innerBody.min').optional(),
check('innerBody.max').optional()
]);
})
以上代码段是我正在验证完整请求正文的较大验证链的一部分。我还尝试从内部innerBody.
中删除check
字符串,但仍然没有运气。我正在console.log
设置阈值主体,并且可以正确打印出来,但是当我试图通过集成测试时,仍然出现验证错误:
{"name":"ValidationError","message":"ValidationError: Validation failed","errors":[{"location":"body","param":"thresholds","value":{"min":3,"max":5},"msg":"Invalid value"}]}
我对Express Validator还是比较陌生,所以如果我错误地链接验证/不正确使用oneOf
或某些东西会喜欢某些指针!
谢谢
回答如下:看上去.custom
函数需要返回Promise
。答案如下:
.custom(innerBody => {
if (!(innerBody.min) || !(innerBody.max)) return Promise.reject('Missing min or max');
return Promise.resolve();
})
使用链验证通过Express Validator检查是否存在可选字段
我正在尝试检查API请求中是否存在可选字段,如果该字段存在,请执行嵌套验证以检查其中是否存在其他两个字段(一个或另一个,或两个都隐式存在)。我正在使用Express Validator尝试完成此任务。
// Sample request body
{
<...>
thresholds: {
min: 3,
max: 5
}
}
// (Attempted) validation chain
check('thresholds').optional()
.custom( innerBody => {
console.log('THRESHOLDS', innerBody);
oneOf([
check('innerBody.min').optional(),
check('innerBody.max').optional()
]);
})
以上代码段是我正在验证完整请求正文的较大验证链的一部分。我还尝试从内部innerBody.
中删除check
字符串,但仍然没有运气。我正在console.log
设置阈值主体,并且可以正确打印出来,但是当我试图通过集成测试时,仍然出现验证错误:
{"name":"ValidationError","message":"ValidationError: Validation failed","errors":[{"location":"body","param":"thresholds","value":{"min":3,"max":5},"msg":"Invalid value"}]}
我对Express Validator还是比较陌生,所以如果我错误地链接验证/不正确使用oneOf
或某些东西会喜欢某些指针!
谢谢
回答如下:看上去.custom
函数需要返回Promise
。答案如下:
.custom(innerBody => {
if (!(innerBody.min) || !(innerBody.max)) return Promise.reject('Missing min or max');
return Promise.resolve();
})