You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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请求:

  1. 安装multer:
npm install multer --save
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:54:09