Node.js 'request'モジュールを使用して特定のURIでGETを実行すると、
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
どうすればいいですか?
コードを使用しないことを強くお勧めします。
process.setMaxListeners(0);
警告は理由なくそこにありません。ほとんどの場合、コードにエラーが隠されているためです。制限を削除すると、警告は削除されますが、その原因は削除されず、リソースリークの原因について警告されなくなります。
正当な理由で制限に達した場合は、関数に適切な値を入れてください(デフォルトは10です)。
また、デフォルトを変更するために、EventEmitterプロトタイプをいじる必要はありません。 defaultMaxListeners属性の値は次のように設定できます。
require('events').EventEmitter.defaultMaxListeners = 15;
コードを使用して、デフォルトの制限をグローバルに増やします:require('events').EventEmitter.prototype._maxListeners = 100;
これは私が問題を解決した方法です:
「request」モジュールのmain.jsに1行追加しました。
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};
Nodejsモジュールに何かを追加することは可能ですが、最善の方法ではないようです(他のコンピューターでコードを実行しようとすると、明らかに同じエラーでプログラムがクラッシュします)。
私はむしろあなた自身のコードで最大リスナー数を設定したい:
var options = {uri:headingUri, headers:headerData, maxRedirects:100};
request.setMaxListeners(0);
request.get(options, function (error, response, body) {
}