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. 测试步骤
- 重启Node后端服务器:
npm start(或npm run dev若用nodemon) - 重启React开发服务器:
npm start - 触发POST请求,检查Node控制台是否打印
questionData内容
内容的提问来源于stack exchange,提问作者daniel lov
相关产品推荐
相关产品推荐

