node.js - nodejs - npm request-promise
node.js-request-¿Cómo "emitter.setMaxListeners()"? (4)
Así resolví el problema:
En main.js del módulo de ''solicitud'' agregué una línea:
Request.prototype.request = function () {
var self = this
self.setMaxListeners(0); // Added line
Esto define oyentes ilimitados http://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListeners
En mi código, establezco explícitamente el valor de ''maxRedirects'':
var options = {uri:headingUri, headers:headerData, maxRedirects:100};
Cuando hago un GET en un determinado URI usando el módulo de "solicitud" de node.js;
var options = {uri:"aURI", headers:headerData};
request.get(options, function (error, response, body) {
}
El mensaje de error es:
[Error: Exceeded maxRedirects. Probably stuck in a redirect loop.]
y también está el siguiente mensaje:
"(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit."
¿Cómo setMaxListeners
?
Aunque es posible agregar algo al módulo nodejs, parece que no es la mejor manera (si intenta ejecutar su código en otra computadora, el programa se bloqueará con el mismo error, obviamente).
Preferiría establecer el número máximo de oyentes en su propio código:
var options = {uri:headingUri, headers:headerData, maxRedirects:100};
request.setMaxListeners(0);
request.get(options, function (error, response, body) {
}
Recomiendo encarecidamente NO usar el código:
process.setMaxListeners(0);
La advertencia no está allí sin razón. La mayoría de las veces, es porque hay un error oculto en su código. Eliminar el límite elimina la advertencia, pero no su causa, y evita que se le avise de una fuente de pérdida de recursos.
Si alcanza el límite por una razón legítima, ponga un valor razonable en la función (el valor predeterminado es 10).
Además, para cambiar el valor predeterminado, no es necesario meterse con el prototipo EventEmitter. puede establecer el valor del atributo defaultMaxListeners así:
require(''events'').EventEmitter.defaultMaxListeners = 15;
Utilizo el código para aumentar el límite predeterminado globalmente: require(''events'').EventEmitter.prototype._maxListeners = 100;