You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置即可,根据你的需求二选一:

  1. 如果需要用MongoDB存储session数据,保留第一个配置,删除第二个重复的session挂载
  2. 如果不需要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 }));

验证步骤

  1. 重启你的Express服务
  2. 访问注册页面提交测试表单,此时req.checkBody应该能正常执行,不会再抛出错误

额外提醒

你当前express-validator的挂载顺序是正确的(bodyParser之后,session之前),这个顺序很关键,确保express-validator能正常解析请求体数据,不用调整。

内容的提问来源于stack exchange,提问作者Rahul_Dabhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:11:13