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

tyu7yeag  于 2023-05-28  发布在  Node.js
关注(0)|答案(9)|浏览(284)

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

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

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

我的代码正在调用第三方https服务器,所以我无法使用wireshark或类似的数据包嗅探工具。
要了解更多信息,我试图调查的问题是here
编辑:
下面是一些类似的问题,询问如何在其他语言中做同样的事情:

zvms9eto

zvms9eto1#

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

xtfmy6hx

xtfmy6hx2#

您可以使用grackle_tracking脚本并通过grackle的平台查看您的数据-我们只是出于完全相同的目的构建此脚本:https://www.getgrackle.com/libraries#grackle_tracking_overview

krugob8w

krugob8w3#

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

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

fae0ux8s

fae0ux8s4#

如果您只需要查看传出流量的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的作者
此答案是在debugging-aid版本为0.2.1时编写的

lstz6jyr

lstz6jyr5#

我来这个问题寻找类似的东西,但我使用的是request包。在这种情况下,您需要做的就是在代码中包含这一行:
require('request-debug')(request);
(make确保已安装request-debug包)
这将把所有请求数据打印到控制台。

mznpcxlj

mznpcxlj6#

一个简单的方法是使用诺克录音机功能。由于您应该为测试用例进行存根通信,因此无论如何您可能都需要将此库作为开发依赖项。
下面的代码将所有http[s]通信记录到控制台,但您可以记录到文件等。文档请访问https://github.com/nock/nock#recording

import nock from 'nock'

nock.recorder.rec({
  output_objects: true
})
pprl5pva

pprl5pva7#

使用HTTP Toolkit。在macOS中执行以下命令进行安装:

brew install --cask http-toolkit

它将提供如何拦截node、chrome和其他内容的说明。

iszxjhcz

iszxjhcz8#

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

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);
    });
});

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

y0u0uwnf

y0u0uwnf9#

如果你使用的节点版本早于node 8,我是node-inspector的忠实粉丝:
https://github.com/node-inspector/node-inspector
它有你正在寻找的一切:

相关问题