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

Postman发送form-data到Node.js Express服务返回空body问题求解

你当前仅配置了express.json()中间件,该中间件仅能解析请求头Content-Type为application/json的请求体,对应你使用Postman raw格式发送JSON的场景。而form-data格式的请求对应Content-Type为multipart/form-data,Express原生没有内置解析该格式的中间件,因此会出现req.body为空的问题。

解决方案

使用Express官方推荐的multer中间件处理form-data格式请求,操作步骤如下:

  • 第一步:安装multer依赖
npm install multer
  • 第二步:根据业务场景配置multer
  1. 仅处理带普通文本字段的form-data(无文件上传需求)
    在你现有代码的app.use(express.json())行之后添加如下配置:
const multer = require('multer')
// 配置仅解析文本字段,不处理上传文件
const upload = multer().none()
app.use(upload)

添加完成后所有接口都可以正常解析纯文本form-data的请求字段。

  1. 需要处理带文件上传的form-data
    配置multer的存储规则,示例代码如下:
const multer = require('multer')
// 配置文件存储路径和命名规则
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // 需提前手动创建uploads文件夹,否则会报错
    cb(null, './uploads')
  },
  filename: function (req, file, cb) {
    // 生成唯一文件名避免重名覆盖
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9)
    cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname))
  }
})
const upload = multer({ storage: storage })

// 对应接口需要单独配置multer解析规则,示例:
// 单文件上传:使用upload.single('前端传递的文件字段名')
// app.post('/api/upload-avatar', upload.single('avatar'), (req, res) => {
//   console.log(req.body) // 获取普通文本字段
//   console.log(req.file) // 获取上传的文件信息
//   res.send('上传成功')
// })
// 多文件上传:使用upload.array('前端传递的文件字段名', 最大上传数量)

内容的提问来源于stack exchange,提问作者Omar Atef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:24:01