express-validator在PUT请求方法中校验规则不生效该如何处理?
express-validator PUT方法校验失效解决
express-validator原生支持所有HTTP方法的校验,PUT方法校验失效和工具本身无关,按以下步骤排查即可:
- 检查body解析中间件配置
需确保在路由注册前,已经全局注册了对应请求格式的解析中间件,接收JSON参数需添加:
接收表单格式参数需添加:app.use(express.json())
若中间件注册顺序晚于路由、或未配置对应中间件,PUT请求的body会为空,app.use(express.urlencoded({ extended: true }))body()相关的校验规则自然不会触发。 - 检查请求头配置
发送PUT请求时Content-Type请求头需要和解析中间件匹配,比如传JSON参数需设置为application/json,否则body解析中间件不会处理请求体。 - 检查是否调用了
validationResult收集错误
express-validator的校验规则只会将校验结果存储在请求对象中,不会主动拦截请求,你需要在业务controller的最开头调用validationResult判断是否存在校验错误,示例代码如下:
若未添加这段逻辑,即使校验失败也会直接执行业务代码,看起来就像校验规则没有运行。const { validationResult } = require('express-validator'); const update = (req, res) => { // 优先读取校验结果 const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } // 后续业务逻辑 } - 验证校验中间件是否正常加载
可以先故意请求不带plotId参数的PUT路径,看是否返回URI requires plot id的错误,即可确认整个校验中间件有没有被正常执行。
额外调试技巧:你可以暂时把body('price')的optional()修饰符去掉,测试不传price参数时是否触发报错,即可快速定位是不是规则本身的逻辑问题。
内容的提问来源于stack exchange,提问作者Shaded
相关产品推荐
相关产品推荐

