如何解决JavaScript通过Axios发请求时服务端无法获取req.body的问题
问题原因
你的前端Axios请求明确设置了Content-Type: application/json,发送的是JSON格式的请求体,但服务端仅配置了解析application/x-www-form-urlencoded类型请求的中间件,完全没处理JSON类型的请求,导致服务端无法解析请求体,req.body自然为空。而Postman发送请求时,你大概率选择了匹配服务端解析格式的选项(如form-data或x-www-form-urlencoded),所以能正常获取参数。
解决方案
针对服务端配置做以下修改:
方案1:使用bodyParser添加JSON解析
在现有urlencoded解析中间件后,添加JSON解析中间件:
app.use(bodyParser.urlencoded({extended: true})) // 新增JSON解析中间件 app.use(bodyParser.json())
注意:如果你的项目还没安装bodyParser,需要先执行npm install body-parser安装依赖。
方案2:使用Express内置解析(Express 4.16.0+)
Express 4.16.0及以上版本已经内置了bodyParser的功能,无需额外安装包,直接替换为:
app.use(express.urlencoded({extended: true})) app.use(express.json())
额外提示:Axios默认会将JavaScript对象序列化为JSON,并自动设置Content-Type: application/json,所以前端代码里的headers配置其实可以省略,不影响请求发送。
内容的提问来源于stack exchange,提问作者c321321sda
相关产品推荐
相关产品推荐

