如何通过Node.js获取Jade表单数据?提交后req.body为undefined
解决Express中表单提交后req.body为undefined的问题
问题核心原因
Express框架默认不会自动解析表单提交的请求体数据,必须手动配置对应的中间件来处理application/x-www-form-urlencoded类型的表单数据(这是普通HTML表单默认的编码格式)。另外你表单里的_method隐藏字段,还需要额外中间件来处理请求方法的转换。
具体解决方案
1. 配置表单解析中间件
在你的Express主应用文件(通常是app.js)中添加以下代码,启用内置的表单解析中间件:
var express = require('express'); var app = express(); // 解析application/x-www-form-urlencoded格式的请求体 app.use(express.urlencoded({ extended: true }));
2. 处理_method的请求方法转换(可选但必要)
因为你的表单用POST方法提交,但通过_method字段指定了实际要使用PUT方法,需要安装并配置method-override中间件:
- 先安装依赖:
npm install method-override
- 在
app.js中添加配置:
var methodOverride = require('method-override'); // 读取请求中的_method参数来转换请求方法 app.use(methodOverride('_method'));
3. 调整路由匹配逻辑
由于表单的action是/userCreation,且实际请求方法会被转换为PUT,需要把路由中的router.post改为router.put,确保路由能匹配到转换后的请求:
var express = require('express'); var router = express.Router(); var user_dao = require('sport-track-db').user_dao; router.get('/', function(req, res, next) { res.render('user_creation'); }); // 改为PUT路由匹配转换后的请求 router.put('/', function(req, res, next) { console.log("ah"); console.log(req.body); // 现在能正常获取表单数据了 // 可通过req.body.name、req.body.email、req.body.age分别获取对应字段值 }); module.exports = router;
4. 确认路由挂载路径
确保主应用文件中路由的挂载路径和表单action一致:
// 假设你的路由文件路径是./routes/user_creation var userCreationRouter = require('./routes/user_creation'); app.use('/userCreation', userCreationRouter);
完成以上配置后,再次提交表单,终端就能正常打印出表单提交的req.body数据了。
内容的提问来源于stack exchange,提问作者Flantier
相关产品推荐
相关产品推荐

