为何express-validator验证XML输入时无法检测缺失字段?
问题分析与解决方案
问题根源
当发送不带任何属性的<credential />时,body-parser-xml解析后的请求体中,session.credential[0].$这个属性对象根本不存在,$.username自然也不存在。而express-validator默认会跳过对不存在字段的验证规则(除了专门检查存在性的规则),所以你原有的验证链只会在字段存在但不符合要求时报错,字段完全不存在时不会触发任何错误。
解决方案
在验证链开头添加.exists()规则,强制要求目标字段必须存在,这样无论字段是不存在还是为空字符串,都会触发验证错误:
router.post("/", body('session.credential[0].$.username', 'Username') .exists() // 新增:确保字段必须存在 .isString() .trim() .notEmpty(), (req, res) => { /* 检查validationResult()后执行业务逻辑 */ });
进阶补充
如果你的业务场景中需要确保<credential>标签至少存在一个,还可以额外验证session.credential的数组长度,避免出现空数组的情况:
router.post("/", body('session.credential', 'Credential list').isArray({ min: 1 }), // 确保credential是数组且至少有一个元素 body('session.credential[0].$.username', 'Username') .exists() .isString() .trim() .notEmpty(), (req, res) => { /* 检查validationResult()后执行业务逻辑 */ });
内容的提问来源于stack exchange,提问作者DaedalusAlpha
相关产品推荐
相关产品推荐

