Node.js+Express中使用BodyParser后req.body为空问题求助
问题排查与解决方案
嘿,这个问题我之前也踩过一模一样的坑!核心原因是中间件的挂载顺序出错了,Express是按照代码编写的顺序依次执行中间件和路由的,你把body-parser放在了POST路由之后,导致请求到达路由时,请求体还没被解析,所以req.body自然是空的。
具体修正思路:
- 把
body-parser相关的中间件挂载代码,移到所有路由定义的前面 - 保持CORS中间件在最靠前的位置,确保跨域请求能被正确处理
修正后的完整代码:
var express = require('express'); var bodyParser = require('body-parser'); var app = express(); // 先挂载CORS中间件处理跨域 app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); // 接着挂载body-parser解析器,确保路由执行前请求体已被解析 app.use(bodyParser.urlencoded({ extended: true })) app.use(bodyParser.json()) // 最后定义POST路由 app.post('/test/json/', function(req, res, next) { res.json(req.body); }) app.listen(8282);
补充说明:
body-parser.json()专门负责解析Content-Type: application/json类型的请求体,这正是你发送{username:"Yacine"}时需要的解析器body-parser.urlencoded()则是处理表单提交的application/x-www-form-urlencoded类型请求体,如果你有这类需求也能覆盖到- 现在重新测试你的POST请求,
req.body就能正确返回你预期的{username:"Yacine"}啦
内容的提问来源于stack exchange,提问作者LynxWeb
相关产品推荐
相关产品推荐

