5

この質問 ここによるとrequest.setMaxListeners(0)、説明されている問題を解決するために電話する必要があります。

私がやろうとすると:

var request = require('request');
request.setMaxListeners(0);

次のエラー メッセージが表示されます。

request.setMaxListeners(0);
        ^ TypeError: Object function request(uri, options, callback) {   if (typeof uri === 'undefined') throw new Error('undefined is not a valid uri or options object.')   if ((typeof options === 'function') && !callback) callback = options   if (options && typeof options === 'object') {
    options.uri = uri   } else if (typeof uri === 'string') {
    options = {uri:uri}   } else {
    options = uri   }

  options = copy(options)

  if (callback) options.callback = callback   var r = new Request(options)   return r } has no method 'setMaxListeners'
    at Object.<anonymous> (/home/vagrant/twitter/test.js:3:9)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3

setMaxListenersrequest-module を使用するときのデフォルト値を正しく調整するにはどうすればよいですか?

node --version: 0.10.4
リクエストモジュールのバージョン: 2.16.6

4

1 に答える 1

8

編集

少し議論した後、「setMaxListeners」の後に、このようなことをしようとしていると思います

var request = require('request');

// this will fail
request.setMaxListeners(0);

request('http://www.google.com', function (error, response, body) {
  // do something ...
})

一歩一歩

var request = require('request');

request モジュールが必要です。このモジュールは機能リクエストをエクスポートします。

この関数はEventEmitter (内部ノード「クラス」)から継承しないため、 「setMaxListeners メソッド」はありません。

これを念頭に置いて、次の行は失敗します

request.setMaxListeners(0);

EventEmitter から継承し、必要なメソッドを持つRequest オブジェクトが必要です。

取得するには、単に request 関数を呼び出します。この関数によって返された値に対して、「setMaxListeners」を呼び出すことができます。

var request_object = request('http://www.google.com')
request_object.setMaxListeners(0)

呼び出しをチェーンした方が良い

request('http://www.google.com').setMaxListeners(0)

警告

最大リスナー制限を削除することはまったくお勧めしません。ある種の無限ループが問題である可能性があります。おそらく、リスナーが各「リクエスト」イベントにバインドされているため、「バインドされたリスナーが多すぎます」というエラーがスローされます。このエラーはメモリ リークを検出する効果的な方法であるため、"unlimited" に設定するのではなく、"maxListeners" 制限を少し引き上げることをお勧めします

これを行うには、int != 0 を渡します。注として、デフォルト値は 10 です。

request(
  //
  // request stuff goes here
  //
).setMaxListeners(20)

答え

var request = require('request');

request('http://www.google.com', function (error, response, body) {
  //
  // do something ...
  //
}).setMaxListeners(20)
于 2013-04-19T00:36:29.540 に答える