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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:18:26