使用最新express-validator时req.getValidationResult不是函数问题求助
解决express-validator中
req.getValidationResult is not a function报错的问题 这问题我之前踩过坑!核心原因是你用的是express-validator的最新版本,但参考的是旧版本的API示例——req.getValidationResult()是v5及更早版本的用法,在v6+的新版本里已经被官方废弃并移除了,所以才会报这个错。
具体原因拆解:
- 你的
package.json里写的是"express-validator": "*",npm会自动拉取当前的最新版本,而新版本的API已经做了简化,不再把验证结果相关的方法挂载到req对象上。 - 你后来改用的
validationResult(req)正是新版本推荐的正确用法,它直接接收req参数来获取验证结果,不需要再通过req对象调用方法。
给你整理好的正确路由代码:
const express = require('express'); const router = express.Router(); const signup = require('../lib/signup.js'); // 注意新版本的导入路径也有简化,直接从express-validator导入即可 const { body, validationResult } = require('express-validator'); router.post('/submit', [ body('username').not().isEmpty().withMessage('please enter username'), body('password').not().isEmpty().withMessage('please enter password') ], (req, res) => { // 新版本的正确用法 const errors = validationResult(req); if (!errors.isEmpty()) { console.log('errors ', errors.array()); // 这里可以把错误返回给客户端,比如: return res.status(400).json({ errors: errors.array() }); } // 验证通过后的业务逻辑 signup.handleSignup(req, res); });
额外建议:
- 不要再用
"express-validator": "*"这种模糊的版本号,建议指定具体的大版本,比如"express-validator": "^7.0.0",避免后续版本更新再次出现API不兼容的情况。 - 后续查示例尽量参考官方的最新文档,旧的博客或教程很可能还停留在旧版API上。
内容的提问来源于stack exchange,提问作者slevin
相关产品推荐
相关产品推荐

