Express validator - how to allow optional fields
Solution 1
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
Solution 2
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.
Solution 3
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();
cyberwombat
My name is Yashua (@cyberwombat) and I am a full stack JS developer with a penchant for pixel perfect design and cutting edge tech. I am the cofounder and lead tech of LotusEngine, an automation and state machine platform. I thrive on co-creating and exploring potential ideas and helping people implement them whether through consultation or direct involvement. I am primarily based in Northern Arizona but travel often. I can equally assist you through online communication or meet you in person should our locations coincide.
Updated on October 10, 2021Comments
-
cyberwombat over 2 years
I am using express-validator version 2.3.0. It appears that fields are always required
req.check('notexist', 'This failed').isInt();
Will always fail - broken or am I missing something? There is a
notEmpty
method for required fields which seems to indicate the default is optional but I am not able to get the above to pass.