Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何像chrome/firefox开发者工具一样监控node.js上的网络?_Javascript_Node.js_Https_Google Chrome Devtools - Fatal编程技术网

Javascript 如何像chrome/firefox开发者工具一样监控node.js上的网络?

Javascript 如何像chrome/firefox开发者工具一样监控node.js上的网络?,javascript,node.js,https,google-chrome-devtools,Javascript,Node.js,Https,Google Chrome Devtools,在开发客户端javascript应用程序时,“开发人员网络”面板对于调试网络问题非常重要: 创建NodeJS应用程序的开发人员如何监控从NodeJS应用程序到http/https服务器的网络流量?例如,如何调试以下网络流量 var http = require('http'); var req = http.request ... req.write ... req.send() 我的代码正在调用第三方https服务器,因此我无法使用wireshark或类似的数据包嗅探工具 关于更多信息,我

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

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

var http = require('http');
var req = http.request ...
req.write ...
req.send()
我的代码正在调用第三方https服务器,因此我无法使用wireshark或类似的数据包嗅探工具

关于更多信息,我试图调查的问题是

编辑:

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

  • PYTHON:
  • 爪哇:

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

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调试工具。你的选择包括:

  • 节点http代理,如中所示
  • middlefiddle是用node.js编写的(但已废弃3年)
  • mitmproxy-一个CLI工具
  • 小提琴手
  • 还有更多-

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

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

require('request-debug')(请求)

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


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

如果您使用的是早于节点8的节点版本,我非常喜欢节点检查器:

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

如果您只需要查看传出流量的URL及其原因,您可以使用
调试帮助

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)
[aid]网络,发送至:http://example.com/
堆栈:位于Agent.createSocket(_http_Agent.js:234:26)
at Agent.addRequest(_http_Agent.js:193:10)
在新的客户端请求中(_http_client.js:277:16)
at Object.request(http.js:44:10)
at Request.start(myapp path/node_modules/Request/Request.js:751:32)
在Request.end(myapppath/node_modules/Request/Request.js:1511:10)
[aid]网络,发送至:http://example.com/
堆栈:位于Agent.createSocket(_http_Agent.js:234:26)
at Agent.addRequest(_http_Agent.js:193:10)
在新的客户端请求中(_http_client.js:277:16)
at Object.request(http.js:44:10)
获取时(myapp path/node_modules/get/source/request as event emitter.js:234:22)
马上。(myapp path/node_modules/get/source/request as event emitter.js:305:10)

免责声明:

我是调试辅助工具的作者

此答案是在0.2.1版上安装调试帮助时编写的,使用HTTP工具包。通过执行以下命令在macOS中安装:

brew安装--cask http工具包

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

您需要的是中间件。我想到了快递。您还可以全局替换
require('http')类似于
require('./httplog'),,其中http日志文件是现有http模块导出方法的简单包装器,该导出方法通过绑定额外事件来记录这些详细信息,因为它返回原始内容。您想调查单个
请求的状态,还是带有依赖资源的html页的状态?@arturgrzesiak我只想调查单个
请求的状态请求。@ChrisSnow您要的确切信息是什么?(看起来chrome的网络标签的图像与你的问题无关。)据我所知,这里没有答案指向chrome开发工具来检查网络请求。node.js v6之后不推荐使用节点检查器。所有这些其他解决方案都依赖于第三方LIB。我使用chrome inspector调试Node.js中的所有内容,只是我不知道如何处理网络请求。不幸的是,只有
req.on('error',function(e){}
回调被执行,而不是
https.request(options,function(res){}
@ChrisSnow如果出现这样的错误,无论如何都没有什么可看的。你不会得到任何标题。我不确定你的意思@jamrizzi。你是说节点检查器缺少网络选项卡?在安装它并运行“node debug app.js”后,我肯定有一个网络选项卡。嗯,我很困惑。node--inspect没有给我e一个网络选项卡。@jamrizzi请注意,
node inspector
!=
node--inspector
是一个外部javascript程序,而
node--inspect
是node runtime的一个嵌入式功能。我也缺少这个功能。我有类似的需求,这个工具非常完美。简单,易于安装和使用,而且非常有用提供了我所需的确切信息——以及更多信息。它告诉我正在发出的网络请求以及发出请求的位置的堆栈跟踪。我在几分钟内就得到了所需的答案。谢谢!如果您的流量在ssl上,则会完全失败