vol*_*one 6 javascript node.js express express-validator
我正在使用express-validator来验证表单,但许多字段是可选的。我已经在我的路线上配置了验证器,如下所示:
const ExpValidate = require('express-validator');
router.post('/api/posthandler',
[ ExpValidate.body("TopicID").optional({nullable: true, checkFalsy: true}).trim().isInt(), ]
async function(req, res) {
const errors = ExpValidate.validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
else {
// Handle form here
}
Run Code Online (Sandbox Code Playgroud)
当使用 提交表单时TopicID: null,我收到一条错误消息:
{
"errors": [
{
"value": "null",
"msg": "Invalid value",
"param": "TopicID",
"location": "body"
}
]
}
Run Code Online (Sandbox Code Playgroud)
即使我{nullable: true, checkFalsy: true}从optional()方法中删除选项,我也会收到相同的错误。
如果我这样做,我不会收到任何错误,ExpValidate.body("TopicID").optional()但这违背了验证器检查isInt()是否提供了值的目的。
TopicID如果我根本不提交,那么我也不会收到任何错误。
我的配置有问题吗?
更新:虽然这个问题是不久前出现的,但发生的情况是表单数据将所有内容作为字符串发送。所以null不能作为传递typeof null,它将作为字符串传递"null"。因此可为空检查不适用于表单数据(但它适用于 JSON 数据)。
phu*_*que 12
凭直觉,我尝试反转方法调用。这个验证器对我有用:
body("date_field").isDate().optional({ nullable: true }),
Run Code Online (Sandbox Code Playgroud)
使用此输入:
{
"date_field": null
}
Run Code Online (Sandbox Code Playgroud)
看来optional()需要最后打电话!
| 归档时间: |
|
| 查看次数: |
12652 次 |
| 最近记录: |