繁体   English   中英

如何在node.js中找到连接ECONNREFUSED错误的来源?

[英]How to find the source of a connect ECONNREFUSED error in node.js?

我继承了具有合理复杂性的nodejs应用程序。 它通过各种网络接口(主要是HTTP REST API)与其他5个应用程序进行交互。 我时不时地遇到一个引发错误的问题,在处理该错误以防止应用程序崩溃的同时,我也不知道错误是从哪里来的。 这是我从此错误中获得的典型信息:

就是这样。 这就是整个消息和堆栈跟踪信息(消息实际上在errno=ECONNREFUSEDsyscall=connect重复了,没有帮助)。 我正在使用nodejs 0.12.2,并将stacktrace行相应地链接到源。 我已经阅读了源代码,但没有得到任何帮助。

我还浏览了SO上与ECONNREFUSED有关的许多问题,但这些问题始终带有代码示例。 如果我知道我的applicatino的哪一部分是对网络请求的响应,则可以修复它。

所以我的问题是,我该如何检测节点应用程序以找出失败的请求来自何处?

PS:我也查看了调试nodejs应用程序的建议 ,但没有找到任何答案

该错误是由主机拒绝的从内核返回的TCP连接引起的-您需要进行一些错误处理并重试尝试以避免这些问题。 尝试cUrl荷兰国际集团的网址,以确保它不是东西,是不对您的机器。

您可以使用模块来封装代码,并确保保留发生错误的上下文。 此外,您应始终为回调等创建命名函数,因为这至少会为您指明正确的方向。

如果您需要的话,还有一些库可以尝试重试HTTP请求等。

以下代码段记录了所有http连接的错误,而与他们的呼叫站点无关:

// install error handler on all sockets to provide context for ECONNREFUSED and smilar errors
// this is not an official API and may break at some point
// it will also likely log this error multiple times, which the socketErrorId helps identify
var http = require('http');
var net = require('net');
var errorCounter = 0;
http.globalAgent.createConnection = function (options) {
  var socket = net.createConnection(options)
  socket.on('error', function (error) {
    errorCounter += 1;
    error.socketErrorId = errorCounter;
    console.log('socket error, while connecting to ', options.href, error);
  })
  return socket
}

我已经在生产环境中运行了一周,它可以帮助您确定无法确定的连接问题。

options对象具有更多属性,而不仅仅是href ,尽管那对我来说最有用。 这是我所做的测试的完整列表: domain, _events, _maxListeners, callback, uri, headers, method, readable, writable, explicitMethod, _qs, _auth, _oauth, _multipart, _redirect, _tunnel, setHeader, hasHeader, getHeader, removeHeader, localAddress, pool, dests, __isRequestRequest, _callback, proxy, tunnel, setHost, originalCookieHeader, _disableCookies, _jar, port, host, path, httpModule, agentClass, agent, _started, href, servername, encoding

上面的片段基于某人在Twitter上看到我的哀悼后为我写的要旨

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM