如何监控node.js上的网络类似于chrome/firefox开发人员工具?

Chr*_*now 32 javascript https node.js google-chrome-devtools

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

在此输入图像描述

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

var http = require('http');
var req = http.request ...
req.write ...
req.send()
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

以下是有关如何在其他语言中执行相同操作的类似问题:

OhJ*_*eez 8

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

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

  • 如果您的流量位于 ssl 上,则完全失败 (2认同)

nau*_*tur 5

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

npm i -D debugging-aid
node --require debugging-aid/network app.js 
Run Code Online (Sandbox Code Playgroud)

结果控制台输出可能如下所示:

[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)
Run Code Online (Sandbox Code Playgroud)

免责声明:

我是debugging-aid的作者
这个答案是在debugging-aid版本0.2.1时写的

  • 我有类似的需求,这个工具非常完美。简单、易于安装和使用,它为我提供了我所需要的信息——甚至更多。它告诉我正在发出的网络请求以及发出请求的堆栈跟踪。我在几分钟内就得到了我需要的答案。谢谢! (2认同)

Hea*_*ode 3

我知道这并不漂亮,但您始终可以在请求调用内的控制台上输出响应标头的内容:

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);
    });
});
Run Code Online (Sandbox Code Playgroud)

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