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

React代理Express报错:接口触发错误后出现ECONNREFUSED连接拒绝

问题诊断

你遗漏了错误分支的执行中断逻辑,这是直接导致后续请求代理报错的核心原因,和前端配置的proxy规则无关。
你的代码在数据库查询返回错误(比如邮箱唯一索引冲突)时,会先进入if(error)分支返回400响应,但分支执行完后没有终止回调逻辑,后续的201成功响应代码依然会执行。此时Express会触发Cannot set headers after they are sent的未捕获运行时错误,直接终止Node.js服务进程——你第一次触发邮箱重复错误时,400响应已经发到客户端所以看起来逻辑正常,但响应发完后服务就因为重复发送响应的错误崩溃了,后续前端再发请求时,8000端口已经没有服务在监听,自然会报ECONNREFUSED的代理错误。

修复方法

在错误响应发送完成后加return语句,阻断后续成功逻辑的执行即可:

// `pool` 来自 `pg` 连接池
pool.query(
  'INSERT INTO users (first_name, last_name, user_name, email, password, last_password, password_salt) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING *',
  [values.first_name, values.last_name, values.user_name, values.email, values.password, values.password, 'tmp_salt'],
  (error, results) => {
    if (error) {
      console.error(error.message);
      const response = {status: false, message: error.message};
      res.status(400).send(response);
      return; // 错误处理完成后直接退出回调,不执行后续逻辑
    }
    res.status(201).send(`User added with user_id: ${results.rows[0].user_id}`);
  }
);
优化建议
  • 修复后可以验证:触发邮箱重复错误后,观察终端的Node服务进程是否保持运行,正常情况下进程不会退出,后续注册请求可以正常被处理
  • 建议给Express添加全局错误捕获中间件,同时监听Node进程的uncaughtException、unhandledRejection事件做兜底处理,避免单个接口的逻辑错误直接打挂整个服务
  • 你在前端package.json中配置的proxy规则是正常生效的,本次问题和跨域配置没有关联,不需要调整该配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:36:15