NodeJS 如何“emitter.setMaxListeners()"?

4jb9z9bj  于 2023-05-22  发布在  Node.js
关注(0)|答案(7)|浏览(619)

当我使用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

pieyvz9o

pieyvz9o1#

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

process.setMaxListeners(0);

警告不是无缘无故的。大多数情况下,这是因为代码中隐藏了错误。删除限制将删除警告,但不会删除其原因,并防止您收到资源泄漏源的警告。
如果您出于合理的原因达到了限制,请在函数中设置一个合理的值(默认值为10)。
此外,要更改默认值,不必修改EventEmitter原型。你可以这样设置defaultMaxListeners属性的值:

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

r1zhe5dt2#

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

ioekq8ef

ioekq8ef3#

我是这样解决这个问题的:
在'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};
mlmc2os5

mlmc2os54#

虽然可以在nodejs模块中添加一些东西,但这似乎不是最好的方法(如果你试图在其他计算机上运行你的代码,程序显然会崩溃并出现相同的错误)。
我宁愿在你自己的代码中设置max listeners number:

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

ryhaxcpt5#

尝试用途:

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

9rnv2umw6#

这是@Félix Brunet answer的扩展

原因-您的应用中有代码隐藏
如何找到-

  • 剥离/注解代码并执行,直到出现错误
  • 检查日志文件
    例如-在我的例子中,我创建了30个winston log示例不知不觉,它开始给出错误
    **注意:**如果您取消此错误,它将在3..4天后再次出现
uujelgoq

uujelgoq7#

这也发生在我身上
我使用这个代码,它的工作

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

试试看,可能会有帮助
谢谢

相关问题