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

使用Socket.IO实时同步API数据时遇连接拒绝错误求助

排查Socket.IO连接拒绝错误(ERR_CONNECTION_REFUSED)

针对你遇到的GET http://localhost:3002/socket.io/?EIO=4&transport=polling&t=OuMq4L7 net::ERR_CONNECTION_REFUSED错误,按以下步骤逐一排查:

1. 确认后端服务器是否正常启动

  • 启动服务器后,检查终端是否输出Server is running on http://localhost:3002,没有则说明服务器未成功启动:
    • 先安装所有依赖:npm install express socket.io ejs node-fetch(替换已废弃的request模块)
    • 运行服务器时查看终端报错,比如serviceKey未填写真实密钥、API请求失败导致的崩溃,这类问题会直接阻止服务器启动。

2. 检查端口占用情况

  • 3002端口可能被其他程序占用,导致服务器无法绑定:
    • Windows:执行netstat -ano | findstr :3002查看占用进程,通过任务管理器杀掉对应PID的进程
    • Mac/Linux:执行lsof -i :3002查看占用进程,用kill -9 PID终止进程
    • 或者直接修改后端PORT变量(比如改成3003),同时前端连接地址同步改为http://localhost:3003

3. 配置Socket.IO跨域规则

  • 若前端通过file://协议直接打开HTML文件,或从其他域名/端口访问,会触发跨域限制,需在后端添加CORS配置:
    // 修改Socket.IO初始化代码
    const io = socketIo(server, {
      cors: {
        origin: "*", // 开发环境临时使用,生产环境需指定具体域名
        methods: ["GET", "POST"]
      }
    });
    
  • 注意:正确的访问方式是通过后端路由打开页面,即访问http://localhost:3002,而非直接打开本地HTML文件。

4. 匹配Socket.IO客户端与服务端版本

  • 你前端使用的是Socket.IO 4.0.0版本,需确保服务端版本一致:
    • 执行npm list socket.io查看服务端版本,若版本不匹配,安装对应版本:npm install socket.io@4.0.0

5. 替换废弃的request模块

  • request模块已停止维护,容易引发潜在错误,建议换成node-fetch,修改后的fetchData函数如下:
    const fetch = require('node-fetch');
    
    const fetchData = async () => {
      const queryParams = new URLSearchParams({
        serviceKey: "你的真实服务密钥", // 替换成实际的serviceKey
        pageNo: "1",
        numOfRows: "10",
        _type: "json",
        cityCode: "25",
        routeId: "DJB30300052",
      });
    
      try {
        const response = await fetch(`${apiUrl}?${queryParams}`);
        if (!response.ok) throw new Error(`API请求失败,状态码:${response.status}`);
        const jsonResponse = await response.json();
        const routeType = jsonResponse.response.body.items.item[0].routetp;
        console.log("Route Type:", routeType);
        io.emit("routeTypeUpdated", routeType);
      } catch (error) {
        console.error("获取数据出错:", error);
      }
    };
    

6. 简化前端连接代码

  • 若前端通过后端渲染(EJS),无需指定完整URL,直接使用自动连接:
    const socket = io(); // 自动连接当前页面的域名和端口
    

内容的提问来源于stack exchange,提问作者이정민

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:14:51