node.js - запрос - Как "emitter.setMaxListeners ()"? - PullRequest
33 голосов
/ 29 ноября 2011

Когда я выполняю GET для определенного URI с помощью модуля запроса 'node.js;

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?

Ответы [ 4 ]

44 голосов
/ 23 мая 2017

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

process.setMaxListeners(0);

Предупреждение не без причины. В большинстве случаев это происходит потому, что в вашем коде скрыта ошибка. Снятие ограничения удаляет предупреждение, но не его причину, и предотвращает предупреждение об источнике утечки ресурса.

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

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

require('events').EventEmitter.defaultMaxListeners = 15;
30 голосов
/ 17 августа 2015

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

7 голосов
/ 28 августа 2012

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

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

var options = {uri:headingUri, headers:headerData, maxRedirects:100};
request.setMaxListeners(0);
request.get(options, function (error, response, body) {
}
7 голосов
/ 30 ноября 2011

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

В main.js модуля 'request' я добавил одну строку:

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};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...