let arr = [
  {
    user_id:1,
    hours:8
  },
  {
    user_id:2,
    hours:7
  }
]
You can put check like this, note that arr would be the key in the request body. 
:
check("arr.*.user_id")  
  .not()  
  .isEmpty()
check("arr.*.hours")  
  .not()  
  .isEmpty()
    I was able to do it with wildcards like this:
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)
    You achieve this by accessing the request body:
const { body } = require('express-validator')
body('*.*')
  .notEmpty()
    For anyone who wants to validate an array of objects using checkSchema, here's an example where I am validating an array of objects which can have 0 items. You could even do custom validation if you throw a function to do so:
JSON:
{
    "employees": [
        {
            "roleId": 3,
            "employeeId": 2,
        },
        {
            "roleId": 5,
            "employeeId": 4,
        },
    ]
}
checkSchema:
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
    }
})
    
                If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With