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

React与Node.js项目代理失效求助:POST请求无法正确转发

问题修复方案

1. 修正React项目的Proxy配置

create-react-app的proxy配置必须直接放在package.json根节点,而非options内部。修改后的React package.json:

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "proxy": "http://localhost:8080", // 移到根节点
  "dependencies": {
    "@testing-library/jest-dom": "^5.17.0",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "allowedHosts": [
    "localhost",
    ".localhost"
  ],
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "react-router-dom": "^6.23.0"
  }
}

2. 修正Node后端的CORS配置

CORS的origin必须包含完整协议(http/https),且React开发服务器默认端口是3000,而非后端的8080。修改后端index.js中的CORS配置:

// CORS Integration
app.use(cors({
  origin: "http://localhost:3000", // 匹配React开发服务器地址
  credentials: true // 可选,若需要携带Cookie等凭证
}));

开发阶段也可以临时用origin: "*"允许所有来源,上线后再限制具体域名。

3. 修正Node后端的package.json

你当前的后端package.json复制了React项目的配置,完全错误。替换为后端专属配置(包含express、cors、mongoose等依赖):

{
  "name": "server",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js" // 可选,开发时自动重启服务器
  },
  "dependencies": {
    "express": "^4.19.2",
    "cors": "^2.8.5",
    "mongoose": "^8.3.4"
  },
  "devDependencies": {
    "nodemon": "^3.1.0" // 可选,开发依赖
  }
}

修改后执行npm install安装正确的依赖。

4. 调整后端路由顺序

确保API路由优先于静态文件服务,避免路由被覆盖。调整index.js的路由顺序:

// 先定义API路由
app.post('/api/submitted', (req, res) => {
  console.log(req.body);
  res.json({ message: 'Received POST request at /api/submitted' });
});

// 再处理静态文件和JSON解析
app.use(express.json());  
app.use(express.static(path.join(__dirname, 'build')));

// 兜底路由(可选,用于React客户端路由)
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

5. 测试步骤

  1. 重启Node后端服务器:npm start(或npm run dev若用nodemon)
  2. 重启React开发服务器:npm start
  3. 触发POST请求,检查Node控制台是否打印questionData内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:44:53