Express.js中body-parser无法解析请求问题求助
解决Express中body-parser无法解析form-data请求的问题
问题1:中间件挂载顺序错误
你的app.js中先挂载了路由,再挂载body-parser解析中间件。Express的中间件按顺序执行,这意味着请求先进入路由处理,但此时请求体还未被解析,导致req.body为空。
修复方法:将body-parser中间件移至路由挂载之前:
var express = require('express'); var app = express(); const routes = require('./Routes/route'); const bodyParser = require('body-parser'); // 先挂载请求体解析中间件 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); // 再挂载路由 app.use('/', routes); var server = app.listen(8081);
问题2:body-parser不支持form-data格式
body-parser的json()和urlencoded()仅能处理application/json和application/x-www-form-urlencoded格式的请求,无法解析multipart/form-data(即你在Postman中使用的form-data)。
解决方法:使用multer库处理form-data请求:
- 安装multer:
npm install multer --save
- 在
app.js中配置multer(若无需处理文件上传,使用multer().none()即可):
var express = require('express'); var app = express(); const routes = require('./Routes/route'); const bodyParser = require('body-parser'); const multer = require('multer'); const upload = multer().none(); // 处理不带文件的form-data // 挂载各类解析中间件 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.use(upload); // 处理form-data格式请求 // 挂载路由 app.use('/', routes); var server = app.listen(8081);
配置完成后,addCount方法即可正确获取form-data中的参数。
另外,若你仅需发送普通表单数据,也可在Postman中选择x-www-form-urlencoded格式,此时仅调整中间件顺序即可解决问题。
内容的提问来源于stack exchange,提问作者Zihan Hossain
相关产品推荐
相关产品推荐

