如何在 node.js 上监控网络,类似于 chrome/firefox 开发者工具?

how to monitor the network on node.js similar to chrome/firefox developer tools?

开发客户端 javascript 应用程序时,开发者网络面板对于调试网络问题非常有用:

创建 NodeJS 应用程序的开发人员如何监控从 nodejs 应用程序到 http/https 服务器的网络流量?例如如何调试以下网络流量?

var http = require('http');
var req = http.request ...
req.write ...
req.send()

我的代码正在调用第三方 https 服务器,所以我无法使用 wireshark 或类似的数据包嗅探工具。

有关更多信息,我正在尝试调查的问题是

编辑:

以下是询问如何用其他语言做同样事情的类似问题:

我知道这不太好,但您始终可以在请求调用内的控制台上输出响应内容 headers:

var req = https.request(options, function(res) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);

    res.on('data', function(d) {
        process.stdout.write(d);
    });
});

然而,您最初的问题不是关于服务器端的问题,而是节点代码本身的问题,因此这在这里没有多大用处。

使用外部 HTTP 调试工具。您的选择包括:

您启动其中一个,告诉他们将流量路由到哪里,然后将您的应用程序指向该调试代理而不是真实服务器。

我来到这个问题是为了寻找类似的东西,但我使用的是 request 包。在这种情况下,您需要做的就是在您的代码中包含这一行:

require('request-debug')(request);

(确保安装了请求调试包)

这会将所有请求数据打印到控制台。

如果您使用的是 node 8 之前的 node 版本,我是 node-inspector 的忠实粉丝:

https://github.com/node-inspector/node-inspector

我相信它有你要找的一切:

如果您只需要查看传出流量的 URL 及其原因,您可以使用 debugging-aid

npm i -D debugging-aid
node --require debugging-aid/network app.js 

最终的控制台输出可能如下所示:

[aid] network, outgoing  to: http://example.com/
 stack:     at Agent.createSocket (_http_agent.js:234:26)
    at Agent.addRequest (_http_agent.js:193:10)
    at new ClientRequest (_http_client.js:277:16)
    at Object.request (http.js:44:10)
    at Request.start (myapp-path/node_modules/request/request.js:751:32)
    at Request.end (myapp-path/node_modules/request/request.js:1511:10)
[aid] network, outgoing  to: http://example.com/
 stack:     at Agent.createSocket (_http_agent.js:234:26)
    at Agent.addRequest (_http_agent.js:193:10)
    at new ClientRequest (_http_client.js:277:16)
    at Object.request (http.js:44:10)
    at get (myapp-path/node_modules/got/source/request-as-event-emitter.js:234:22)
    at Immediate.<anonymous> (myapp-path/node_modules/got/source/request-as-event-emitter.js:305:10)

免责声明:

我是调试助手的作者
这个答案是在 debugging-aid 版本为 0.2.1

时写的

使用 HTTP 工具包。通过执行以下命令在 macOS 中安装:

brew install --cask http-toolkit

它将提供如何拦截节点的说明,chrome和其他。

我还希望在 devtools 中有一个用于 NodeJS 调试的网络选项卡。由于它不存在,我使用了下面的包。这会跟踪来自 NodeJs 应用程序的所有 http 和 https 请求,并将它们显示在 chrome 网络选项卡中,例如 UI.

Network Activity Viewer