Ответ 1
Я использую код, чтобы увеличить лимит по умолчанию во всем мире:
require('events').EventEmitter.prototype._maxListeners = 100;
Когда я делаю GET на определенном URI, используя модуль node.js 'request;
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) {
}
Я настоятельно рекомендую НЕ использовать код:
process.setMaxListeners(0);
предупреждение здесь не для чего. большую часть времени, это потому, что в вашем коде есть ошибка. удаление предела удаляет предупреждение, но не является причиной и предупреждает вас о том, что источник утечки из источника.
Если вы достигли предела по законной причине, поместите разумное значение в функцию (по умолчанию 10).
также, чтобы изменить значение по умолчанию, нет необходимости связываться с прототипом EventEmitter. вы можете установить значение атрибута defaultMaxListeners следующим образом:
require('events').EventEmitter.defaultMaxListeners = 15;
Вот как я решил проблему:
В 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};