Postman发送POST请求时,body里的JSON数据没传到后端怎么办?

设计师素红 阅读 76

在用Postman测试用户注册接口时,发现后端总是收到空对象…

我设置了请求体为raw JSON格式,参数写了


{
  "username": "test",
  "email": "test@example.com"
}

但后端Node.js打印出来的req.body一直是空的。试过把Content-Type头设成application/json,也尝试过x-www-form-urlencoded格式都不行。明明在本地Postman测试GET请求没问题啊,这到底是哪里出错了?

我来解答 赞 9 收藏
二维码
手机扫码查看
2 条解答
UE丶燕丽
这问题我遇到过好多次了,新手特别容易踩这个坑。我来帮你一步步排查:

第一,确认Postman设置是否正确:
1. 在Postman的body选项卡里,确保选择了raw选项
2. 右上角下拉菜单要选JSON格式(不是Text)
3. 确认Content-Type头确实是application/json(Postman有时会偷偷改掉)

第二,Node.js后端这边,必须使用body解析中间件。如果你用的是Express,最常见的坑就是忘记加这行代码:

const express = require('express');
const app = express();

// 必须加上这两行才能解析JSON请求体
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.post('/register', (req, res) => {
console.log(req.body); // 现在应该能正常输出了
});


为什么需要中间件?因为HTTP请求体默认是二进制流,需要专门解析成JSON对象。Express 4.x版本后把body解析器拆分成独立中间件了,不像老版本内置。

如果还是不行,可以试试这个更健壮的方案:

const bodyParser = require('body-parser');
app.use(bodyParser.json({
verify: (req, res, buf) => {
try {
JSON.parse(buf.toString());
} catch(e) {
res.status(400).send('Invalid JSON');
throw new Error('Invalid JSON');
}
}
}));


这里加了JSON格式验证,能帮你发现请求体格式问题。

补充几个常见踩坑点:
- 检查路由是否正确定义为POST方法
- 确保没有其他中间件修改了请求体
- 如果用到了代理或网关,检查是否有拦截修改

测试时可以先用最简单的代码验证:
app.post('/test', (req, res) => {
console.log('Headers:', req.headers);
console.log('Raw body:', req.rawBody);
res.send(req.body);
});


如果还是不行...那就该请咖啡了(开玩笑)。可以把Postman的完整请求截图和Node控制台输出发出来,我再帮你看看。
点赞 1
2026-03-08 10:06
UX永莲
UX永莲 Lv1
试试这个:检查是否漏了中间件配置。Express需要加app.use(express.json())来解析JSON请求体。没有这个中间件,req.body会是空对象。
点赞 8
2026-02-07 09:07