node.js – request – Cum se face „emitter.setMaxListeners()”? (Programare, Node.Js, Httprequest)

camden_kid a intrebat.

Când fac un GET pe un anumit URI folosind modulul node.js „request”;

var options = {uri:"aURI", headers:headerData};
request.get(options, function (error, response, body) {
}

Mesajul de eroare este:

[Error: Exceeded maxRedirects. Probably stuck in a redirect loop.]

și există, de asemenea, următorul mesaj:

"(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit."

Cum fac setMaxListeners?

7 răspunsuri
Félix Brunet

Vă sfătuiesc cu tărie să NU folosiți codul:

process.setMaxListeners(0);

Avertismentul nu este acolo fără motiv. De cele mai multe ori, se datorează faptului că există o eroare ascunsă în codul dvs. Eliminarea limitei înlătură avertismentul, dar nu și cauza acestuia, și vă împiedică să fiți avertizat de o sursă de scurgere de resurse.

Dacă atingeți limita pentru un motiv legitim, puneți o valoare rezonabilă în funcție (valoarea implicită este 10).

De asemenea, pentru a schimba valoarea implicită, nu este necesar să modificați prototipul EventEmitter. puteți seta valoarea atributului defaultMaxListeners astfel:

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

Comentarii

  • Cum să identificați cauza scurgerii de resurse? –  > Por Brent Washburne.
  • pe scurt : depanarea. Există multe lucruri care pot cauza scurgerile de resurse și există unele instrumente care pot ajuta la detectarea lor, dar nu există o metodă magică de a găsi orice eroare. –  > Por Félix Brunet.
  • Ați putea folosi require('events').defaultMaxListeners = 15; direct. –  > Por Mohammed Essehemy.
  • unde să o utilizați în react native –  > Por Anuj Sharma.
  • unde pot pune aceste coduri? –  > Por Clouds.
zag2art

Folosesc codul pentru a crește limita implicită la nivel global:
require('events').EventEmitter.prototype._maxListeners = 100;

Comentarii

  • Am avut această problemă în jenkins rulând un script casperjs, am adăugat această linie în partea de sus a scriptului și funcționează!. Mulțumiri var y = require(‘events’).EventEmitter.prototype._maxListeners = 100; – –  > Por user2908957.
  • acest lucru nu funcționează pentru mine. Ceea ce urmează funcționează: require(‘events’).defaultMaxListeners = 15; – –  > Por Debashis Chowdhury.
  • unde să pun această linie de cod? –  > Por Clouds.
camden_kid

Iată cum am rezolvat problema:

În main.js al modulului ‘request’ am adăugat o linie:

Request.prototype.request = function () {
  var self = this
  self.setMaxListeners(0); // Added line

Acest lucru definește ascultători nelimitați http://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListeners

În codul meu am setat în mod explicit valoarea ‘maxRedirects’:

var options = {uri:headingUri, headers:headerData, maxRedirects:100};

Comentarii

  • ‘Request’ este cererea clientului. Am dreptate ? puteți să detaliați puțin mai mult ? –  > Por Riz.
  • @dev Da, este o cerere a clientului. Este vorba de modulul nodului ‘request’. –  > Por camden_kid.
  • adăugat modulul request. Acum pot să pun acest cod în funcția callback a http.createServer ? Am încercat, dar avertismentul este încă acolo. –  > Por Riz.
  • process.setMaxListeners(0); // OMG, its so simple... :D –  > Por Riz.
  • process.setMaxListeners(0); nu-mi rezolvă problema. versiunea nodului: v9.4.0. Și, de asemenea, nu este o bună practică să editați codul în node_modules rt? Poate cineva spune orice altă soluție? –  > Por Sanjay Kumar N S.
Mariya Davydova

Deși este posibil să adăugați ceva la modulul nodejs, se pare că nu este cea mai bună metodă (dacă încercați să rulați codul pe alt computer, programul se va bloca cu aceeași eroare, evident).

Aș prefera să setez numărul maxim de ascultători în propriul cod:

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

Comentarii

  • Acest lucru dă request.setMaxListeners is not a function eroare. Trebuie să o înlănțuiți pe request.get(…, function(){…}).setMaxListeners(0) (Întrebări conexe) –  > Por laggingreflex.
vijay

aceasta este Extindere la răspunsul lui @Félix Brunet

Motivul – există un cod ascuns în aplicația dvs.

Cum se găsește –

  • Scoateți/comentați codul și executați până când ajungeți la eroare
  • verificați fișierul jurnal

De exemplu, – În cazul meu, am creat 30 de instanțe de winston log Fără să știu, și a început să dea eroare

Notă : dacă suprimați această eroare, ea va apărea din nou după 3..4 zile.

Malik Jehangir Riaz

Încercați să utilizați:

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

AKM The Gamer

Mi s-a întâmplat și mie

Am folosit acest cod și a funcționat

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

Încercați-l. S-ar putea să vă ajute

Mulțumesc