node.js – 请求 – 如何“emitter.setMaxListeners()”?

当我使用node.js'request'模块对某个URI进行GET时,

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." 

我如何设置setMaxListeners

我使用代码来增加全局默认限制: require('events').EventEmitter.prototype._maxListeners = 100;

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

我宁愿在自己的代码中设置最大听众数量:

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

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

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

 Request.prototype.request = function () { var self = this self.setMaxListeners(0); // Added line 

这定义了无限的监听器http://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListeners

在我的代码中,我明确地设置了“maxRedirects”的值:

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

我强烈build议不要使用代码:

 process.setMaxListeners(0); 

警告是不是在这里没有。 大部分时间,这是因为你的代码隐藏了一个错误。 删除限制删除警告,但不是原因,并防止你被警告的资源来源。

如果达到了合法原因的限制,请在函数中添加合理的值(默认值为10)。

另外,为了改变默认值,没有必要混淆EventEmitter原型。 你可以像这样设置defaultMaxListeners属性的值:

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