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

使用Express与WebSocket时遭遇ECONNREFUSED错误的排查求助

问题原因分析及解决方案

针对你遇到的WebSocket连接ECONNREFUSED错误,结合描述和代码,可能的原因及对应解决方式如下:

1. 服务监听端口与测试端口不匹配

你的代码中服务器监听端口为PORT环境变量,默认值是3000:

const PORT = process.env.PORT || 3000;
server.listen(PORT, () => console.log(`Server running on port ${PORT}`));

虽然你用lsof -i :4000查到有Node进程监听4000,但需确认当前运行的服务实际端口:

  • 查看服务启动日志,确认日志输出的端口是4000还是3000
  • 检查.env文件是否正确设置PORT=4000,且dotenv.config()能正常加载该变量(比如文件路径是否正确)

如果服务实际运行在3000,用4000测试必然会连接失败。

2. WebSocket URL格式错误

你当前使用的测试URL是:

ws://localhost:4000/token='tokengoeshere'

但代码中通过URLSearchParams(req.url).get('token')获取token,这要求token必须作为查询参数放在?后,正确格式应为:

ws://localhost:4000?token=tokengoeshere

注意不要加单引号,直接传递token值即可。虽然格式错误主要会导致认证失败,但如果服务器对路径有特殊处理,也可能间接引发连接问题。

3. 旧进程占用端口未释放

即使lsof显示端口有进程监听,也可能是之前的服务进程未正常关闭,导致新服务无法绑定端口:

  • 用kill -9 <进程PID>杀掉监听4000的Node进程
  • 重启服务后再测试连接

4. 本地网络或防火墙限制

  • 尝试用127.0.0.1代替localhost,避免DNS解析问题:ws://127.0.0.1:4000?token=tokengoeshere
  • 临时关闭本地防火墙,测试是否是防火墙阻止了端口连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:45:22