node.js restler调用的多个响应

我创build了一个用于发送REST请求的库:

var rest = require('restler'); module.exports = { beginSession: function() { var options = { method: "GET", query: {begin_session: '1'}}; rest.get('http://countly/i', options). on('complete', function(data, response){ console.log('Status: ' + response.statusCode); }); } }; 

问题是每次我使用这个库并且调用被响应时,'on complete'被多次调用:方法的第一次使用只会调用'on complete'一次,第二次使用方法会调用'on complete'两次等等….

我究竟做错了什么?

谢谢Jose

我也在为这个挣扎。 但没有在互联网上find答案。 我终于明白了。 这是由于每次调用rest.get()时都会注册“complete”事件。

我的解决scheme是使用.once()而不是.on()。 例如:

 var rest = require('restler'); rest.get('url_to_fetch').once('complete', function(rtn, rsp){ ....blah blah.... }); // refer here http://nodejs.org/api/events.html#events_emitter_once_event_listener 

希望这有助于。

TL; DR:在restler中的Bug,在npm更新之前快速修复:将git master添加到package.json

这里真正的问题是节点0.10中事件API的一些更改导致restler重新引发旧事件侦听器,如https://github.com/danwrong/restler/issues/112中所述 。

八月底,这是固定在https://github.com/danwrong/restler/pull/113 。 当我们等待一个适当的npm版本时,它通过使用当前的git头来为我工作。

 "restler": "git://github.com/danwrong/restler.git#9d455ff14c57ddbe263dbbcd0289d76413bfe07d" 

免责声明:我不知道在这个版本中有什么损坏,或者为什么它还没有发布。 自从上次发布以来,我没有深究这些问题或差异。

更新2014年8月:从那时起有一个npm发布,它似乎包括修复。

这是因为您为每个呼叫附加了一个新事件。 尝试先解除事件。

在您的callback处理程序中发生的JSON请求exception也可能导致此行为。

请参阅此处的pull请求以获得解决scheme: https : //github.com/danwrong/restler/pull/94

请查看v3.2.2。 升级你的package.json:

 npm install restler --save 

它为我解决了这个问题。