node.js restler调用的多个响应

时间:2013-04-16 21:51:45

标签: javascript node.js restler

我已经创建了一个用于发送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完成'两次等等......

我做错了什么?

由于 何

5 个答案:

答案 0 :(得分:14)

我也在努力解决这个问题。但没有在互联网上找到答案。我终于明白了。这是因为每次调用rest.get()时都会注册的“完整”事件。

我的解决方案是使用.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

希望这有帮助。

答案 1 :(得分:4)

TL; DR:在restler中出现错误,快速修复直到更新npm:将git master添加到package.json

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

8月底,https://github.com/danwrong/restler/pull/113修正了这个问题。当我们等待正确的npm释放时,它通过使用当前的git头为我工作。

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

免责声明:我不知道此版本中的内容是什么或者尚未发布的原因。自从上次发布以来,我没有解决问题或差异。

更新2014年8月:从那以后有一个npm版本,它似乎包括修复。

答案 2 :(得分:2)

这是因为您为每次通话附加了一个新事件。尝试先取消绑定事件。

答案 3 :(得分:1)

JSON请求的回调处理程序中发生的异常也可能导致此行为。

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

答案 4 :(得分:1)

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

npm install restler --save

它为我解决了这个问题。