Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
node.js-请求-如何;emitter.setMaxListeners();?_Node.js_Httprequest - Fatal编程技术网

node.js-请求-如何;emitter.setMaxListeners();?

node.js-请求-如何;emitter.setMaxListeners();?,node.js,httprequest,Node.js,Httprequest,当我使用node.js“request”模块获取某个URI时 var options = {uri:"aURI", headers:headerData}; request.get(options, function (error, response, body) { } 错误消息是: [Error: Exceeded maxRedirects. Probably stuck in a redirect loop.] "(node) warning: possible EventEmitte

当我使用node.js“request”模块获取某个URI时

var options = {uri:"aURI", headers:headerData};
request.get(options, function (error, response, body) {
}
错误消息是:

[Error: Exceeded maxRedirects. Probably stuck in a redirect loop.]
"(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit."
还有以下消息:

[Error: Exceeded maxRedirects. Probably stuck in a redirect loop.]
"(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit."

如何设置MaxListeners?

这就是我解决问题的方法:

在'request'模块的main.js中,我添加了一行:

Request.prototype.request = function () {
  var self = this
  self.setMaxListeners(0); // Added line
这定义了无限的侦听器

在我的代码中,我显式设置了“maxRedirects”值:

var options = {uri:headingUri, headers:headerData, maxRedirects:100};

虽然向nodejs模块添加一些东西是可能的,但这似乎不是最好的方法(如果您尝试在其他计算机上运行代码,程序显然会因相同的错误而崩溃)

我宁愿在您自己的代码中设置最大侦听器数:

var options = {uri:headingUri, headers:headerData, maxRedirects:100};
request.setMaxListeners(0);
request.get(options, function (error, response, body) {
}

我使用代码全局增加默认限额:

require('events').EventEmitter.prototype.\u maxListeners=100;

我强烈建议不要使用该代码:

process.setMaxListeners(0);
警告不是没有道理的。大多数情况下,这是因为代码中隐藏了一个错误。删除限制会删除警告,但不会删除其原因,并防止您收到资源泄漏源的警告

如果您出于合法原因达到限制,请在函数中输入一个合理的值(默认值为10)

此外,要更改默认设置,不必弄乱EventEmitter原型。可以按如下方式设置defaultMaxListeners属性的值:

require('events').EventEmitter.defaultMaxListeners = 15;
尝试使用:

require('events').EventEmitter.defaultMaxListeners = Infinity; 

这是@Félix Brunet的扩展

原因-您的应用程序中隐藏了代码

如何查找-

  • 剥离/注释代码并执行,直到出现错误
  • 检查日志文件
例如-在我的例子中,我在不知不觉中创建了30个实例,它开始出错

注意:如果你消除这个错误,它将在3..4天后再次出现

这也发生在我身上

我使用这个代码,它工作了

require('events').EventEmitter.defaultMaxListeners = infinity;
试试看。这可能会有帮助


谢谢

“请求”是客户请求。我说得对吗?你能再详细一点吗?@dev是的,这是客户的要求。这是节点模块“请求”。添加了请求模块。现在我可以将该代码放入http.createServer的回调函数中吗?我尝试了,但警告仍然存在。
process.setMaxListeners(0);//天哪,这太简单了…:D
process.setMaxListeners(0);解决不了我的问题。节点版本:v9.4.0。而且,在node_模块rt中编辑代码不是一个好的做法?有人能告诉我其他的解决方案吗?这给出了
request.setMaxListeners不是一个函数
错误。您必须在
request.get(…,function(){…})上链接它。setMaxListeners(0)
()在运行casperjs脚本的jenkins中遇到了这个问题,在脚本顶部添加了这一行,它就可以工作了!。感谢var y=require('events').EventEmitter.prototype.\u maxListeners=100;这对我不管用。下面的命令正在运行:require('events')。defaultMaxListeners=15;这行代码放在哪里?如何识别资源泄漏的原因?简而言之:调试。他们有很多可能导致资源泄漏的因素。还有一些工具可以帮助检测它们。但它们并不是发现任何bug的神奇方法直接。在react Native中的何处使用它我可以将这些代码放在何处?