React配置package.json代理转发请求报ECONNREFUSED错误
代理报错修复方案
你遇到的ECONNREFUSED错误本质是React开发服务器(3000端口)无法和3001端口的后端建立连接,结合你贴的代码,按以下步骤逐一修复即可:
1. 先验证后端服务可用性
直接在浏览器地址栏输入http://localhost:3001/api/recipes访问,如果显示无法连接,先解决后端启动问题:
- 检查后端入口文件(通常为
app.js/server.js)是否正确写了端口监听逻辑:app.listen(3001),启动后端时确认控制台输出了端口监听成功的日志 - 排查3001端口是否被其他进程占用:Windows系统执行
netstat -ano | findstr :3001、Mac/Linux系统执行lsof -i :3001,找到占用进程后结束冲突进程,或者修改后端服务监听端口(改端口的话同步修改package.json里的proxy配置即可)
2. 修复路由文件导出错误
你贴的routes.js文件末尾写的是module.exports = {},等于前面定义的包含/api/recipes接口的路由对象根本没有导出,Express实例无法加载到这个路由,将最后一行修改为:
module.exports = router
修改后回到后端入口文件,确认正确引入并挂载了路由:
const express = require('express') const app = express() // 引入路由文件,路径按你实际的文件存放位置调整 const recipeRouter = require('./routes') // 挂载路由 app.use(recipeRouter) // 端口监听 app.listen(3001, () => { console.log('后端服务已启动在3001端口') })
3. 补全接口响应逻辑
当前你写的接口查询完数据库后,仅在服务端控制台打印了结果,没有给前端返回任何响应,就算代理连通,前端也会触发JSON解析错误,将路由处理逻辑修改为:
router.get('/api/recipes', (req, res) => { db.readRecipes() .then((result) => { console.log(result) // 将查询结果作为JSON响应返回给前端 res.status(200).json(result) }) .catch((err) => { logError(err) // 异常场景也要返回标准错误响应 res.status(500).json({ error: '获取菜谱列表失败' }) }) })
4. 重启服务验证
所有代码和配置修改完成后,先重启后端服务,再重启React前端开发服务——package.json中的proxy配置仅在服务启动时加载,不重启不会生效。重启后再触发页面请求,代理错误即可解决。
补充说明:如果你使用的是React 18及以上版本,后续如果遇到package.json配置proxy不生效的情况,可以使用
http-proxy-middleware通过setupProxy.js文件配置代理规则,你当前的问题和proxy配置本身无关,核心是后端服务与路由的配置错误。
内容的提问来源于stack exchange,提问作者deadant88
相关产品推荐
相关产品推荐

