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

使用Fetch API从React向Express传数据失败,请求无法被接收

排查React Fetch POST到Express服务器无数据接收问题

问题根源及修复步骤

1. React端Fetch请求的body格式错误

Fetch的body不能直接传入JavaScript对象,必须序列化为JSON字符串,同时要设置Content-Type: application/json请求头,否则服务器无法识别并解析数据。

修正后的React代码:

const sendData = async () => {
  try {
    const response = await fetch("http://localhost:4000/register", {
      method: "POST",
      mode: "cors",
      headers: {
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ "state": "its working" })
    });
    // 可选:处理服务器响应,避免请求挂起
    const result = await response.json();
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

useEffect(() => {
  console.log("Effect started");
  sendData();
}, [user]);

2. Express端未配置必要中间件

Express默认不会自动解析JSON格式的请求体,必须添加express.json()中间件才能让req.body获取到数据;另外如果涉及跨域请求,还需要配置cors中间件。

修正后的Express代码:

const express = require('express');
const cors = require('cors'); // 先执行 npm install cors 安装依赖
const app = express();

// 配置CORS中间件,允许跨域请求
app.use(cors());
// 配置JSON解析中间件,解析请求体中的JSON数据
app.use(express.json());

app.route("/register").post((req, res) => {
  const postData = req.body.state;
  console.log(postData);
  // 必须给客户端返回响应,避免请求长期挂起
  res.json({ message: "数据已接收", receivedData: postData });
});

// 启动服务器,确保端口与React请求一致
app.listen(4000, () => {
  console.log("服务器运行在http://localhost:4000");
});

3. 额外检查项

  • 确认已安装Express和CORS依赖:执行npm install express cors
  • 检查React项目运行端口(通常为3000)和Express服务器端口(4000)是否与代码配置一致
  • 打开浏览器控制台,查看是否存在网络请求错误或CORS相关报错,辅助定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:25:57