当我使用 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
?
我强烈建议不要使用该代码:
process.setMaxListeners(0);
这个警告并不是没有理由的。大多数时候,这是因为您的代码中隐藏着错误。删除限制会删除警告,但不会删除其原因,并防止您收到有关资源泄漏源的警告。
如果您出于正当原因达到了限制,请在函数中输入一个合理的值(默认值为 10)。
此外,要更改默认值,无需弄乱 EventEmitter 原型。您可以像这样设置 defaultMaxListeners 属性的值:
require('events').EventEmitter.defaultMaxListeners = 15;
我使用代码来增加全局默认限制:
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) {
}
尝试使用:
require('events').EventEmitter.defaultMaxListeners = Infinity;
2024年,要提高全球默认限额,您可以:
import { EventEmitter } from 'stream'
EventEmitter.defaultMaxListeners = 20
这是@Félix Brunet 的扩展answer
原因 - 您的应用程序中有代码隐藏
如何找到-
例如 - 在我的例子中,我创建了 30 个 winston log 不知不觉地,它开始出现错误
注意:如果您抑制此错误,它会在 3..4 天后再次出现
我也遇到过这样的事
我使用这个代码并且它有效
require('events').EventEmitter.defaultMaxListeners = infinity;
尝试一下。可能有帮助
谢谢