Node.js应用无法使用socket.io-client连接

Fla*_*nix 3 sockets node.js socket.io

背景

我有一个使用Node.js的服务器socket.io,该服务器通过HTTPS接受来自客户端的连接。

我知道此服务器可以正常工作,因为我能够通过浏览器连接到该服务器。

问题

问题是我无法创建节点应用程序作为客户端连接到该服务器。

我正在使用以下代码:

const io = require("socket.io-client");

const socket = io.connect("https://my.website.com:3002", { secure: true, reconnect: true });

socket.on("connect", function(){
    console.log("connected");
});

socket.on("disconnect", function(){
    console.log("disconnected");
});

socket.on("error", console.error);
Run Code Online (Sandbox Code Playgroud)

服务器未注册任何连接,此应用程序未记录任何错误。似乎我连接到错误的服务器,但是当我使用浏览器时,相同的URL可以正常工作。

研究

我已经在github和官方文档中搜索了答案。甚至来自stackoverflow的类似问题似乎也不起作用:

我究竟做错了什么 ?

Fla*_*nix 6

回答

意识到之后,并不是所有的错误都会导致"error"事件发生(特别感谢@RolandStarke),我发现我有一个一致的XHR池请求:

{ Error: xhr poll error
    at XHR.Transport.onError (/Users/pedro/Workspace/backend-stresser/node_modules/engine.io-client/lib/transport.js:64:13)
    at Request.<anonymous> (/Users/pedro/Workspace/backend-stresser/node_modules/engine.io-client/lib/transports/polling-xhr.js:128:10)
    at Request.Emitter.emit (/Users/pedro/Workspace/backend-stresser/node_modules/component-emitter/index.js:133:20)
    at Request.onError (/Users/pedro/Workspace/backend-stresser/node_modules/engine.io-client/lib/transports/polling-xhr.js:310:8)
    at Timeout._onTimeout (/Users/pedro/Workspace/backend-stresser/node_modules/engine.io-client/lib/transports/polling-xhr.js:257:18)
    at ontimeout (timers.js:469:11)
    at tryOnTimeout (timers.js:304:5)
    at Timer.listOnTimeout (timers.js:264:5) type: 'TransportError', description: 503 }
Run Code Online (Sandbox Code Playgroud)

获得这些信息后,我进行了快速搜索并找到了解决此问题的方法,这似乎是一个错误:

我现在使用的代码是:

const socket = io.connect("https://my.website.com:3002", { secure: true, reconnection: true, rejectUnauthorized: false });
Run Code Online (Sandbox Code Playgroud)

它按预期工作。

  • 在将我的头撞在墙上 2 天后,这个答案拯救了我的屁股。我发现的其他示例/答案都没有显示如何使用 `https` (3认同)
  • 对我来说,关键是“rejectUnauthorized: false”,因为我使用的是自签名证书。 (2认同)