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

发送JSON payload的fetch请求后端req.body为空,Postman请求正常

问题分析与解决方案

我之前也碰到过一模一样的坑!核心原因其实很直白:你的前端fetch请求没设置正确的Content-Type请求头,而后端的解析逻辑(比如Express的express.json()中间件)只有识别到这个头时,才会自动把请求体解析成JSON对象。

为什么Postman能正常工作?

Postman在你选择发送JSON格式请求时,会自动帮你加上Content-Type: application/json这个请求头。后端看到这个头,就知道要把请求体按JSON格式解析,所以能拿到正确的数据。

前端代码的修改点

你的当前代码只指定了请求方法和body,但没告诉后端这个body是JSON格式的。只需要给requestOptions添加上headers配置就行:

let raw = JSON.stringify({"name":"James","favourite":"books"})
var requestOptions = { 
  method: 'POST', 
  body: raw,
  // 新增这行,明确告诉后端请求体是JSON类型
  headers: { 'Content-Type': 'application/json' }
};
let send = () => {
 fetch("http://mywebsite.herokuapp.com/send", requestOptions)
 .then(response => response.text())
 .then(result => console.log(result))
 .catch(error => console.log('error', error));
}

后端的额外检查

另外要确认你的Express后端已经配置了express.json()中间件——没有这个中间件的话,就算前端加了请求头,后端也没法解析JSON请求体:

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

// 必须在路由之前配置这个中间件,用于解析JSON请求体
app.use(express.json());

app.post('/send', (req, res) => { 
  console.log(req.body); // 现在应该能正常拿到{"name":"James","favourite":"books"}了
  res.send('请求已接收');
});

这样修改后,前端发送的请求就和Postman的请求完全一致了,后端就能正确获取到请求体里的JSON数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:37:53