React+Express代理请求报错(ECONNREFUSED)求助
解决React + Express代理请求ECONNREFUSED错误
我帮你排查一下这个问题,看起来核心是你的Express服务器没有成功启动,或者代理配置存在冲突,导致React的请求没法正确转发到服务器。咱们一步步来解决:
1. 移除冲突的Proxy配置
在Create React App中,当你使用setupProxy.js自定义代理时,package.json里的proxy字段会被忽略,而且你这里配置的是https,但你的Express服务器用的是http,这本身就会导致请求失败。
修改package.json:
删除这一行:
"proxy": "https://localhost:3001/",
2. 修正服务器启动脚本路径
你的启动脚本node-env-run server --exec nodemon默认会找根目录下的server.js,但你的服务器文件是server/index.js,路径不匹配会导致服务器启动失败。
修改package.json里的scripts:
把server脚本改成:
"server": "node-env-run server/index.js --exec nodemon | pino-colada",
3. 确保所有服务器依赖已安装
可能你漏装了服务器需要的开发依赖,导致启动脚本无法正常运行。运行以下命令安装所有必需的包:
npm install express body-parser express-pino-logger node-env-run nodemon pino-colada
4. 优化setupProxy.js配置
调整代理配置,添加changeOrigin: true(确保请求头的Host正确设置),并简化路径匹配规则:
修改setupProxy.js:
const { createProxyMiddleware } = require('http-proxy-middleware'); module.exports = function(app) { app.use( '/api', createProxyMiddleware({ target: 'http://localhost:3001', changeOrigin: true, }) ); };
5. 检查端口占用
确认3001端口没有被其他程序占用:
- Mac/Linux:运行
lsof -i :3001,找到PID后用kill <PID>杀掉进程 - Windows:运行
netstat -ano | findstr :3001,找到PID后在任务管理器中结束对应进程
6. 重新启动项目
停止当前的npm run dev进程,然后重新运行:
npm run dev
此时你应该能在终端看到两行关键日志:
- React开发服务器的
Starting the development server... - Express服务器的
Express server is running on localhost:3001
如果看到Express的启动日志,说明服务器正常运行了,再测试提交表单,应该就能成功获取到问候信息了。
内容的提问来源于stack exchange,提问作者I Love Code
相关产品推荐
相关产品推荐

