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
它为我解决了这个问题。