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

问题描述 投票:0回答:10

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

enter image description here

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

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

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

有关更多信息,我试图调查的问题是这里

编辑:

这里有类似的问题,询问如何用其他语言做同样的事情:

javascript node.js https google-chrome-devtools
10个回答
12
投票

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

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


11
投票

如果您只需要查看传出流量的 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)

免责声明:

我是调试辅助的作者
这个答案是在 debug-aid 版本为 0.2.1 时写的


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

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


3
投票

我来到这个问题是为了寻找类似的东西,但我正在使用

request
包。在这种情况下,您需要做的就是在代码中包含这一行:

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

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

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


3
投票

一种简单的方法是使用 nock 记录器功能。由于您应该为测试用例建立通信存根,因此您可能需要这个库作为开发依赖项。

以下内容将所有 http[s] 通信记录到控制台,但您可以记录到文件等。此处的文档https://github.com/nock/nock#recording

import nock from 'nock'

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

3
投票

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

brew install --cask http-toolkit

它将提供如何拦截node、chrome等的说明。


2
投票

如果您使用的节点版本早于 Node 8,我是 Node-inspector 的忠实粉丝:

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

我相信它拥有您正在寻找的一切:


2
投票

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

网络活动查看器


0
投票

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


0
投票

如果您正在寻找 NodeJS 浏览器调试界面的官方/内置功能,至少对于 Chrome,它还不存在,但有一个开放的功能请求:支持网络检查 #75。您可以做的是给问题单一个竖起大拇指的反应,以表明您希望它得到实施(这有助于维护人员判断用户希望优先考虑的内容)。注意:请避免在问题单中发表嘈杂的评论,例如仅包含“+1”/“bump”的评论;留下一个竖起大拇指就足以传达这一点。您可以通过阅读现有评论并订阅问题单来获取有关新评论的通知来跟踪当前进度。

© www.soinside.com 2019 - 2024. All rights reserved.