我使用express-validator(6.x)版本来验证输入请求参数。
我有一个地址嵌套对象,所以这个字段是可选的,但如果有地址键,其他嵌套对象是必需的。
样本输入
const details = {
name: "abcd",
address: {
area: "test1",
city: {
code: "123",
name: "test"
},
state: {
code: "123",
name: "test"
},
country: {
code: "123",
name: "test"
}
}
}
const validate = [
body('name').not().isEmpty().isString(),
body('address.area').optional().isString(),
body('address.city.name').optional().isString(),
body('address.city.code').optional().isString(),
body('address.state.name').optional().isString(),
body('address.state.code').optional().isString(),
body('address.country.code').optional().isString(),
body('address.country.name').optional().isString(),
]
router.route('/:userId')
.put(update, function(req, res){
//code....
})在这里,我尝试使用自定义键,但不起作用。
示例input#1 (有效)
const details = {
name: "abcd"
}示例Input#2:
const details = {
name: "abcd",
address: {}
}上述输入无效,应包含所有地址嵌套对象,如area、state、country。
做这件事最好的方法是什么?
发布于 2021-02-09 14:37:27
当地址值存在时,我会使用一个自定义验证器来检查条件,如下所示
const validate = [
body('name').not().isEmpty().isString(),
body('address').optional(),
body('address.city.name').custom((value,{req}) => {
if(req.body.address != undefined && req.body.address.city.name == undefined){
throw new Error("City is required for the address");
}
else {
return true;
}
})
];https://stackoverflow.com/questions/66111965
复制相似问题