Express validator - how to allow optional fields

You can use the optional method:

req.check('notexist', 'This works').optional().isInt();

This won't work if the field is an empty string "" or false or 0 for that you need to pass in checkFalsy: true .optional({checkFalsy: true})

An 422 status error will be thrown if you are only using .optional() & not passing any arguments.

Edit: See the docs here


As for express-validator 6 it's done like this:

check('email').isEmail().optional({nullable: true})

From documentation:

You can customize this behavior by passing an object with the following options:

nullable: if true, fields with null values will be considered optional

checkFalsy: if true, fields with falsy values (eg "", 0, false, null) will also be considered optional

More info about optional rule.


That's the expected behavior, yes. The assumption of validation is that you want to act on a value of a known key. To get what you want, you could do something like this:

if(req.param('mykey'))
  req.check('mykey', 'This failed').isInt();