gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:24:47 25 4
gpt4 key购买 nike

我继承了一个具有合理复杂性的nodejs应用程序。它通过各种网络接口(interface)(主要是 HTTP REST API)与其他 5 个应用程序交互。我时不时地遇到抛出错误的问题,虽然对其进行处理以防止应用程序崩溃,但我无法判断错误来自何处。以下是我从该错误中获得的典型信息量:

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

我还浏览了这里与 ECONNREFUSED 相关的许多问题,但这些问题总是带有代码示例。如果我知道我的应用程序的哪一部分是对网络请求的响应,我就可以修复它。

所以我的问题是,如何检测 Node 应用程序来找出像这样的失败请求来自何处?

PS:我也看过the recommendations for debugging nodejs applications ,但没有找到任何答案来回答我的问题。

最佳答案

以下代码片段记录所有 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
}

我已经在生产中运行了一周,它有助于识别否则无法确定的连接问题。

选项对象具有更多属性,而不仅仅是 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

上面的代码片段基于 a gist someone wrote for me在 Twitter 上看到我的哀悼之后。

关于javascript - 如何在node.js中查找连接ECONNREFUSED错误的来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31120569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com