新手求助:Express.js POST方法无法正常工作(附代码)
解决你的Express POST请求无法获取req.body的问题
作为Node.js和Express新手,遇到POST请求拿不到数据的情况太常见了,我帮你梳理几个最可能的原因和解决办法:
1. 先确认表单能被提交
看你贴的Jade代码最后是截断的,没看到提交按钮!如果表单里没有<button type="submit">或者<input type="submit">,用户根本触发不了POST请求。赶紧在表单末尾加个提交按钮:
button.btn.btn-primary(type='submit') 提交注册信息
2. 换用Express内置的请求解析器(替代body-parser)
虽然你引入了body-parser,但从Express 4.16.0开始,框架已经自带了请求解析功能,比单独装body-parser更稳定。把你路由里的body-parser代码替换成下面这样:
// 删掉原来的body-parser引入和use代码,换成这两行 router.use(express.urlencoded({ extended: false })); router.use(express.json());
这样能确保表单默认的application/x-www-form-urlencoded格式数据被正确解析。
3. 检查主应用是否挂载了你的users路由
别忘了在app.js(或者你的项目主入口文件)里挂载users路由,不然/users/registration这个请求根本找不到对应的处理逻辑:
const usersRouter = require('./routes/users'); app.use('/users', usersRouter);
4. 修正表单字段的拼写错误
我注意到你表单里的密码字段name是passowrd(多了个o),正确应该是password。这个错误虽然不会导致整个req.body为空,但后续拿密码值的时候会找不到,记得改过来。
5. 先测试请求是否真的到达了路由
你可以临时修改POST路由,加个响应来确认请求是否被接收:
router.post('/registration', function(req, res, next) { console.log('POST请求已收到!'); console.log('当前请求体:', req.body); res.send('收到的数据:' + JSON.stringify(req.body)); });
提交表单后看页面有没有返回内容,同时看控制台日志,就能知道req.body到底有没有数据了。
按上面的步骤排查,应该能解决你的问题。如果还是不行,把控制台的日志输出告诉我,我再帮你深挖~
内容的提问来源于stack exchange,提问作者Blueturtle
相关产品推荐
相关产品推荐

