Подтвердить что ты не робот

Node.js - request - Как "emitter.setMaxListeners()"?

Когда я делаю 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?

4b9b3361

Ответ 1

Я использую код, чтобы увеличить лимит по умолчанию во всем мире: require('events').EventEmitter.prototype._maxListeners = 100;

Ответ 2

Хотя добавление чего-то к модулю nodejs возможно, кажется, что это не самый лучший способ (если вы попытаетесь запустить свой код на другом компьютере, программа будет сбой с той же ошибкой, очевидно).

Я предпочел бы установить максимальное количество слушателей в вашем собственном коде:

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

Ответ 3

Я настоятельно рекомендую НЕ использовать код:

process.setMaxListeners(0);

предупреждение здесь не для чего. большую часть времени, это потому, что в вашем коде есть ошибка. удаление предела удаляет предупреждение, но не является причиной и предупреждает вас о том, что источник утечки из источника.

Если вы достигли предела по законной причине, поместите разумное значение в функцию (по умолчанию 10).

также, чтобы изменить значение по умолчанию, нет необходимости связываться с прототипом EventEmitter. вы можете установить значение атрибута defaultMaxListeners следующим образом:

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

Ответ 4

Вот как я решил проблему:

В 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};