You need to enable JavaScript to run this app. 已配置CORS中间件,请求API仍报ERR_CONNECTION_REFUSED、Fetch失败如何排查
优惠活动
大模型
产品
解决方案
定价
更多

已配置CORS中间件,请求API仍报ERR_CONNECTION_REFUSED、Fetch失败如何排查

前后端联调ERR_CONNECTION_REFUSED与CORS报错排查指南

报错本质澄清

  • net::ERR_CONNECTION_REFUSED属于网络层错误,代表请求根本未到达后端服务,并非CORS跨域配置问题,需优先排查连通性。
  • TypeError: Failed to fetch是请求完全失败的通用报错,会在连接拒绝、跨域预检失败、网络中断等场景下触发,不能直接等同于CORS配置错误。

第一步:优先排查网络连通性(解决连接拒绝问题)

  • 确认后端启动状态:查看后端控制台是否打印Server is running on port ${port}的启动日志,若未打印,需先解决后端启动失败问题(常见原因:dotenv变量未加载、端口被占用、数据库连接报错阻塞启动流程)。
  • 核对前端API常量取值:
    • 需和后端实际服务地址完全匹配,比如后端默认运行在http://localhost:8000,前端API应配置为http://localhost:8000/api,避免出现端口写错、http/https协议写错、路径段多/少的问题。
    • 验证方式:用Postman或Insomnia直接向后端的/api/signup接口发送POST测试请求,若工具能正常拿到后端返回,说明后端服务连通,问题出在前端请求配置;若工具也无法连接,需检查后端端口是否被系统防火墙拦截、是否绑定了正确的网卡地址。

第二步:修正前端请求的错误配置

  • 移除前端fetch请求头中自行添加的Access-Control-Allow-Origin、Access-Control-Request-Method字段:这两个是后端返回给浏览器的响应头,并非前端请求需要携带的请求头,主动添加会触发浏览器发送额外的OPTIONS预检请求,若后端未正确处理预检就会抛出跨域错误。
  • 修正后的signup函数示例:
    const signup = (user) => {
      fetch(`${API}/signup`, {
        method: "POST",
        mode: 'cors',
        headers: {
          "Content-Type": "application/json",
          Accept: "application/json",
        },
        body: JSON.stringify(user)
      })
      .then(response => response.json())
      .catch(err => console.log(err));
    };
    

第三步:优化后端CORS中间件配置

  • 你已经将cors中间件挂载在路由注册之前的操作是正确的,但默认的cors()配置对部分请求兼容性较差,可显式配置参数覆盖默认行为,替换原有app.use(cors())的代码如下:
    app.use(cors({
      origin: 'http://localhost:3000', // 匹配前端实际运行地址,对应请求头中的Referer字段
      methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
      allowedHeaders: ['Content-Type', 'Accept'],
      credentials: true // 后续需要携带cookie时需开启该配置
    }));
    
  • 额外校验:确认后端路由的挂载路径,确保前端请求的${API}/signup和后端实际路径完全匹配(即authRoutes内定义的signup路由,和/api挂载前缀拼接后的地址无偏差)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 04:06:04