【发布时间】:2020-09-07 00:08:03
【问题描述】:
我正在使用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
}
当使用TopicID: null 提交表单时,我收到一条错误消息:
{
"errors": [
{
"value": "null",
"msg": "Invalid value",
"param": "TopicID",
"location": "body"
}
]
}
即使我从optional() 方法中删除选项{nullable: true, checkFalsy: true},我也会遇到同样的错误。
如果我只做ExpValidate.body("TopicID").optional(),我不会收到任何错误,但这违背了验证器的目的,即检查isInt()是否提供了值。
如果我根本不提交TopicID,那么我也不会收到任何错误。
我的配置有问题吗?
更新:虽然这个问题是不久前提出的,但实际情况是表单数据将 EVERYTHING 作为字符串发送。所以null不能作为typeof null传递,它将作为字符串"null"传递。因此,可为空的检查不适用于表单数据(但它适用于 JSON 数据)。
【问题讨论】:
-
文档或 github repo 可以更有效地了解 isInt 和 trim 的工作原理,
-
在 isInt 之前尝试清理值然后进行其他检查github.com/validatorjs/validator.js#validators
-
@KunalAwasthi 如果我只执行
ExpValidate.body("TopicID").optional(),我不会收到任何错误,但这违背了验证器的目的,即检查isInt()是否提供了值。如果提供了值,我需要检查它是否为整数。我以为这就是 optional 的作用?
标签: javascript node.js express express-validator