node.js-request-like "emitter.setMaxListeners ()"?


Kiedy wprowadzam konkretne URI przy użyciu modułu Node.js ";
var options = {uri:"aURI", headers:headerData};
request.get(options, function (error, response, body) {
}


Komunikat o błędzie

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


i jest też następująca wiadomość

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

Jak
setMaxListeners
?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zdecydowanie odradzam używanie tego kodu:
process.setMaxListeners(0);

Ostrzeżenie tutaj nie jest z powodu. W większości przypadków dzieje się tak, ponieważ błąd jest ukryty w kodzie. Usuwanie ograniczeń eliminuje ostrzeżenie, ale nie jest jego powód i zapobiega wyciekom zasobom źródło.
Jeśli osiągniesz limit z uzasadnionego powodu, umieść rozsądną wartość w funkcji (domyślnie 10).
Nie musisz też zadzierać z prototypem EventEmitter, aby zmienić ustawienia domyślne. możesz ustawić wartość atrybutu defaultMaxListeners w następujący sposób:
require('events').EventEmitter.defaultMaxListeners = 15;
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używam tego kodu, aby globalnie zwiększyć domyślny limit:
require ('events'). EventEmitter.prototype._maxListeners = 100;
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Oto jak rozwiązałem ten problem:
W main.js modułu 'request' dodałem jedną linię:
Request.prototype.request = function () {
var self = this
self.setMaxListeners(0);// Added line

Definiuje nieograniczoną liczbę słuchaczy

http://nodejs.org/documents/v0 ... eners
http://nodejs.org/docs/v0.4.7/ ... eners
W moim kodzie jawnie ustawiłem wartość „maxRedirects”:
var options = {uri:headingUri, headers:headerData, maxRedirects:100};
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Chociaż dodanie czegoś do modułu nodejs jest możliwe, najwyraźniej nie jest to najlepszy sposób (jeśli spróbujesz uruchomić kod na innym komputerze, program oczywiście zawiesi się z tym samym błędem).
Wolałbym ustawić maksymalną liczbę słuchaczy we własnym kodzie:
var options = {uri:headingUri, headers:headerData, maxRedirects:100};
request.setMaxListeners(0);
request.get(options, function (error, response, body) {
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

to rozszerzenie do @ Félix Brunet

answer
https://stackoverflow.com/a/44143119/1390678

Przyczyna

- w Twojej aplikacji

jest ukryty

kod

Jak znaleźć

-
  • Podziel/skomentuj kod i wykonuj do momentu wystąpienia błędu
  • sprawdź plik dziennika


na przykład
, w moim przypadku utworzyłem 30 instancji

magazyn Winston
https://github.com/winstonjs/winston

nieświadomie

i zaczął dawać błąd

Uwaga:

Jeśli pominiesz ten błąd, powtórzy się on za 3-4 dni.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj użyć: require ('events'). EventEmitter.defaultMaxListeners = Infinity;
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Mnie też się to przydarzyło
Używam tego kodu i działa
require('events').EventEmitter.defaultMaxListeners = infinity;

Spróbuj. To może pomóc
podziękować

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się