随机出现 ECONNREFUSED 错误

Randomly getting ECONNREFUSED error

在我正在开发的 Sails.js 应用程序中,我随机遇到了一个 ECONNREFUSED 错误。我试图检查引发错误的代码片段,但没有成功。我已经将日志切换为详细(NODE_DEBUG 环境变量设置为 'net')并且我得到了这个:

NET 6070: onread 11
NET 6070: got data
NET 6070: _read
NET 6070: _read
NET 6070: _read wait for connection
NET 6070: pipe false undefined
NET 6070: connect: find host 127.0.0.1
NET 6070: connect: dns options [object Object]
NET 6070: onread 8680
NET 6070: got data
NET 6070: _read
NET 6070: afterConnect
NET 6070: destroy
NET 6070: close
NET 6070: close handle
verbose: Lowering sails...
verbose: Sent kill signal to child process (6080)...
verbose: Shutting down HTTP server...
NET 6070: SERVER _emitCloseIfDrained
NET 6070: SERVER handle? false   connections? 11
events.js:85
      throw er; // Unhandled 'error' event
        ^
Error: connect ECONNREFUSED
    at exports._errnoException (util.js:746:11)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)

我真的不知道这里出了什么问题...

更新

当我使用节点检查器进行调试时,错误消失了。奇怪!

基本上,根据您显示的日志,events.js:85 该文件在该行抛出错误(我知道,很明显我只是在描述所有内容)。现在,如果没有该代码,将无法调试抛出错误的原因。但是,我相信在抛出上述错误的那一行有一个 method/function 调用,并且它没有包含在 try/catch 块中,我的建议是将它包装起来并记录错误消息以便检查发生了什么。

我一直在做一些研究,偶然发现许多错误都指向 events.js:85。这似乎与您用于 运行 您的应用程序的端口有关。大多数解决方案指出您应该选择一个随机端口或更改您在应用程序中使用的端口。

来源here

我知道出了什么问题。这是一个没有错误回调的https请求。

示例:

var request = require('https').request(requestOptions, function (response) {
    //logic here
});

request.on('error', function (err) {
    //error handling here
});
request.end();

我错过了 'error' 回调。 ECONNREFUSED 是由请求抛出的,在某些时候,请求没有成功完成,并抛出了那个错误。