express-validator报错TypeError: req.checkBody is not a function求助
解决req.checkBody不是函数的问题(express-validator 3.1.2)
我帮你定位到了问题根源,也整理好了修复方案:
问题分析
你在server.js里连续挂载了两次express-session中间件,第二次挂载的session会重置request对象上的扩展方法——包括express-validator添加的checkBody、sanitizeBody等方法。这就导致你虽然能在req对象里看到这些方法的存在,但实际调用时会触发"not a function"的错误。
看你代码里的这段重复配置:
app.use(session({ secret: '123456', key: '99785', resave: false, saveUninitialized: false, store: new MongoStore({ mongooseConnection: mongoose.connection }) })); app.use(session({ "secret": 'secret12345', "resave": false, "saveUninitialized": true }));
修复方案
只保留一个session配置即可,根据你的需求二选一:
- 如果需要用MongoDB存储session数据,保留第一个配置,删除第二个重复的session挂载
- 如果不需要MongoStore,就保留第二个配置并删除第一个
修复后的相关代码示例(保留MongoStore版本):
// Sessions allow us to store data on visitors from request to request app.use(session({ secret: '123456', key: '99785', resave: false, saveUninitialized: false, store: new MongoStore({ mongooseConnection: mongoose.connection }) })); // 移除下面这行重复的session中间件 // app.use(session({ "secret": 'secret12345', "resave": false, "saveUninitialized": true }));
验证步骤
- 重启你的Express服务
- 访问注册页面提交测试表单,此时
req.checkBody应该能正常执行,不会再抛出错误
额外提醒
你当前express-validator的挂载顺序是正确的(bodyParser之后,session之前),这个顺序很关键,确保express-validator能正常解析请求体数据,不用调整。
内容的提问来源于stack exchange,提问作者Rahul_Dabhi
相关产品推荐
相关产品推荐

