Express-validator误校验Cookie而非请求体的问题解决求助
问题解决:express-validator 校验嵌套字段始终报错的问题
问题原因
从错误信息里的location: 'cookies'可以看出,express-validator默认会在**所有请求位置(cookies、body、query、params等)**查找目标字段,当它在cookies中找不到applicant.name时,就直接抛出错误,完全忽略了存在于req.body中的数据。
解决方案
明确指定校验规则的查找位置为body,有两种实现方式:
方式一:修改checkSchema配置
在字段规则中添加location: 'body',告诉校验器只从请求体中查找该字段:
const validationSchema = checkSchema({ 'applicant.name': { exists: true, errorMessage: 'Name field is required', location: 'body' // 关键:指定从body获取字段 }, });
方式二:使用body()链式校验(可选)
如果你更偏好链式写法,也可以替换成body()方法的校验逻辑,它默认只从请求体中查找字段:
const { body } = require('express-validator'); const validationSchema = [ body('applicant.name') .exists() .withMessage('Name field is required') ];
额外注意
确保前端提交的表单数据格式正确:
- 如果是传统表单提交,字段名需要写成
applicant[name],这样后端才能解析出嵌套的applicant对象; - 如果是JSON格式提交,要设置请求头
Content-Type: application/json,并且请求体是合法的JSON结构(比如{"applicant": {"name": "xxx"}})。
内容的提问来源于stack exchange,提问作者SadCoder
相关产品推荐
相关产品推荐

