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

Express中POST请求req.body为空问题求助

解决Express中POST请求req.body为空的问题

问题分析

你当前的代码已经配置了express.json()和express.urlencoded({ extended: true }),但这两个中间件仅能处理application/json和application/x-www-form-urlencoded格式的请求,无法解析Postman里的form-data(multipart/form-data)类型;另外raw格式请求需要严格匹配请求头与请求体格式,否则也会导致解析失败。

分场景解决方案

1. 处理Postman中form-data格式的请求

form-data属于multipart类型,需要额外安装并配置multer中间件来解析:

  • 安装multer依赖
npm install multer
  • 在app.js中配置multer(全局生效)
import express from 'express';
import multer from 'multer';
import router from './router.js';

const app = express();
const port = 3000;
// 配置为仅解析数据,不保存文件到磁盘
const upload = multer({ storage: multer.memoryStorage() });

app.use(express.json())
app.use(express.urlencoded({ extended: true }))
// 全局应用multer解析所有form-data请求
app.use(upload.any());

app.use('/', router)

app.listen(port, () => {
    console.log(`App listening at http://localhost:${port}`);
});
  • 或者仅在目标路由单独配置
    修改router.js中的对应路由:
import express from 'express'
import multer from 'multer';

const router = express.Router()
const upload = multer({ storage: multer.memoryStorage() });

router.post('/myurl', upload.any(), (req, res) => {
    console.log('req', req.body)
})

export default router

2. 处理Postman中raw格式的请求

必须满足两个条件:

  • 在Postman的请求头中,将Content-Type设置为application/json
  • 请求体是合法的JSON格式,示例:
{
    "name": "test",
    "age": 20
}

注意避免语法错误(比如引号不闭合、多余逗号),否则express.json()无法解析,req.body会保持为空。

额外检查项

  • 确认Postman请求URL与你的路由/myurl完全匹配,无拼写错误
  • 确保中间件加载顺序正确:express.json()、express.urlencoded()、multer必须在app.use('/', router)之前配置,否则中间件不会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:35:16