Quand je fais un GET sur un certain URI en utilisant le module 'request' de node.js;
var options = {uri:"aURI", headers:headerData};
request.get(options, function (error, response, body) {
}
Le message d'erreur est:
[Error: Exceeded maxRedirects. Probably stuck in a redirect loop.]
et il y a aussi le message suivant:
"(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit."
Comment puis-je setMaxListeners
?
Je conseille fortement de NE PAS utiliser le code:
process.setMaxListeners(0);
L'avertissement n'est pas là sans raison. La plupart du temps, c'est parce qu'il y a une erreur cachée dans votre code. La suppression de la limite supprime l'avertissement, mais pas sa cause, et vous empêche d'être averti d'une source de fuite de ressources.
Si vous atteignez la limite pour une raison légitime, mettez une valeur raisonnable dans la fonction (la valeur par défaut est 10).
De plus, pour modifier la valeur par défaut, il n'est pas nécessaire de jouer avec le prototype EventEmitter. vous pouvez définir la valeur de l'attribut defaultMaxListeners comme suit:
require('events').EventEmitter.defaultMaxListeners = 15;
J'utilise le code pour augmenter globalement la limite par défaut: require('events').EventEmitter.prototype._maxListeners = 100;
Voici comment j'ai résolu le problème:
Dans main.js du module 'request', j'ai ajouté une ligne:
Request.prototype.request = function () {
var self = this
self.setMaxListeners(0); // Added line
Cela définit des écouteurs illimités http://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListeners
Dans mon code, j'ai défini explicitement la valeur 'maxRedirects':
var options = {uri:headingUri, headers:headerData, maxRedirects:100};
Bien que l'ajout de quelque chose au module nodejs soit possible, cela ne semble pas être le meilleur moyen (si vous essayez d'exécuter votre code sur un autre ordinateur, le programme se bloquera avec la même erreur, évidemment).
Je préfère définir le nombre maximal d'écouteurs dans votre propre code:
var options = {uri:headingUri, headers:headerData, maxRedirects:100};
request.setMaxListeners(0);
request.get(options, function (error, response, body) {
}