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

setMaxListeners使用请求模块时如何正确调整默认值?

节点--版本: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);

您需要一个Request 对象,它继承自 EventEmitter并具有所需的方法。

要获得一个,只需调用请求函数。在此函数返回的值上,您可以调用“setMaxListeners”。

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

如果我们链接调用更好

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

警告

完全不建议删除最大侦听器限制。某种无限循环可能是问题 - 可能每个“请求”事件都绑定了一个监听器 - 抛出一个“太多的监听器绑定”错误。此错误是检测内存泄漏的有效方法,因此我建议提高一点“maxListeners”限制,而不是将其设置为“unlimited”

为此,请传递一个 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 回答