我正在使用快速验证器来验证我的字段。但是现在我有2或3个对象的数组,其中包含如下所示的“ userId”和“ Hours”字段。
[
{
user_id:1,
hours:8
},
{
user_id:2,
hours:7
}
]
现在我需要验证是否 hours或user_id 之类的对象属性为空。如果为空则抛出错误。
答案 0 :(得分:4)
let arr = [
{
user_id:1,
hours:8
},
{
user_id:2,
hours:7
}
]
您可以像这样放置支票:
check("arr.*.user_id")
.not()
.isEmpty()
check("arr.*.hours")
.not()
.isEmpty()
答案 1 :(得分:2)
您可以通过访问请求正文来实现:
const { body } = require('express-validator')
body('*.*')
.notEmpty()
答案 2 :(得分:1)
对于想要使用 checkSchema 验证对象数组的任何人,这里有一个示例,我正在验证可以包含 0 个项目的对象数组。如果您抛出一个函数,您甚至可以进行自定义验证:
JSON:
{
"employees": [
{
"roleId": 3,
"employeeId": 2,
},
{
"roleId": 5,
"employeeId": 4,
},
]
}
检查架构:
const customValidator = (async (employees, { req }) => {
if (!Array.isArray(employees)) {
return true; // let the base isArray: true validation take over.
}
if(!something) {
throw Error('employee error');
}
// validate at your will here.
return true;
}
checkSchema({
employees: {
isArray: true,
min: 0,
custom: {
options: customValidator
},
},
"employees.*.roleId": {
isInt: true
},
"employees.*.employeeId": {
isInt: true
}
})
答案 3 :(得分:0)
假设您要验证该数组而不是输入,首先必须遍历该对象数组,如下所示:
const array=[{user_id:1,hours:8},{user_id:2,hours:7}]
$.each(array,(key,value)=>{
//your validation here
if(value.user_id.isEmpty()||value.hours.isEmpty())
{
//handle this
}
})
答案 4 :(得分:0)
我能够用这样的通配符做到这一点:
app.post('/users', [
body().isArray(),
body('*.user_id', 'user_idfield must be a number').isNumeric(),
body('*.hours', 'annotations field must a number').exists().isNumeric(),
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({errors: errors.array()});
}
return res.status(200).json(req.body)