【问题标题】:how to monitor the network on node.js similar to chrome/firefox developer tools?如何监控 node.js 上的网络,类似于 chrome/firefox 开发者工具?
【发布时间】:2015-05-06 13:20:01
【问题描述】:

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

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

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

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

如需更多信息,我要调查的问题是here

编辑:

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

【问题讨论】:

  • 你需要的是中间件。想到快递。您还可以将require('http'); 全局替换为require('./http-log');,其中http-log 文件是现有http 模块的exports 方法的简单包装,通过绑定额外事件来记录此类详细信息因为它返回原件。
  • 您要调查单个request 的状态还是带有依赖资源的html 页面?
  • @arturgrzesiak 我只想调查一个请求。
  • @ChrisSnow 你在寻找什么确切的信息? (看来 chrome 的网络标签的图像与您的问题无关。)
  • 据我所知,这里没有答案指向用于检查网络请求的 chrome 开发工具。 node-inspector 在 Node.js v6 之后被弃用。所有这些其他解决方案都依赖于 3rd 方库。我使用 chrome 检查器来调试 Node.js 中的所有内容,但我不知道如何处理网络请求。

标签: javascript node.js https google-chrome-devtools


【解决方案1】:

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

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

【讨论】:

  • 如果您的流量在 ssl 上,完全失败
【解决方案2】:

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

免责声明:

我是调试辅助的作者
此答案是在调试辅助版本为 0.2.1 时编写的

【讨论】:

  • 我也有类似的需求,这个工具非常完美。简单、易于安装和使用,它准确地为我提供了我需要的信息——甚至更多。它告诉我正在发出的网络请求以及发出请求的位置的堆栈跟踪。我在几分钟内得到了我需要的答案。谢谢!
【解决方案3】:

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

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

(确保已安装 request-debug 包)

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

    • 不幸的是,只有req.on('error', function(e) {} 回调被执行,而不是https.request(options, function(res) {}
    • @ChrisSnow 如果出现这样的错误,无论如何也没什么可看的。你不会得到任何标题。
    【解决方案5】:

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

    brew install --cask http-toolkit
    

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

    【讨论】:

      【解决方案6】:

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

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

      我相信它拥有您想要的一切:

      【讨论】:

      • 我不确定你的意思@jamrizzi。您是说节点检查器缺少网络选项卡?安装并运行“node-debug app.js”后,我肯定有一个网络选项卡。
      • 嗯,我很困惑。 node --inspect 没有给我一个网络标签。
      • @jamrizzi 请注意node-inspector != node --inspectnode-inspector 是外部 javascript 程序,而 node --inspect 是节点运行时的嵌入式功能。
      • 我也找不到它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2015-08-30
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      相关资源
      最近更新 更多