如何为Firebase实现Node.Js服务器端事件侦听器?

时间:2015-06-05 21:13:09

标签: javascript node.js windows-8 firebase

我正在尝试使用firebase的Node包监听我的firebase中的数据更改。我使用的on()方法应该不停地监听更改(而不是只监听特定事件第一次出现的once()方法)我在服务器上的listener.js文件是完全是这样的:

var Firebase=require('firebase');
var Ref= new Firebase('https://mydatabase.firebaseio.com/users/');
 Ref.on('child_changed',function(childsnapshot,prevchildname){
 Ref.child(childsnapshot.key()).push("I hear you!");

} ) ;

但它仅适用于第一次出现,并在第二次出现后抛出致命的内存错误。

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

我对服务器端编程很陌生,不知道该怎么做。我必须遗漏一些重要的东西。我应该首先使用节点设置特殊服务器设置吗?或者每隔一秒左右创建一个使用once()方法运行脚本的守护进程?

1 个答案:

答案 0 :(得分:3)

我很确定你在这里创造了一个无限循环:

  1. 您将值推送到https://mydatabase.firebaseio.com/users/
  2. on('child_changed'事件在您的脚本中触发
  3. 您的脚本按值
  4. 推送新子项
  5. 所以我们回到第2步并重复
  6. 它也会很快发生,因为Firebase客户端会立即发起本地事件。

    看起来你正在尝试创建一个聊天机器人。这意味着你更有可能想要创建兄弟信息:

    var Firebase=require('firebase');
    var ref= new Firebase('https://mydatabase.firebaseio.com/users/');
    ref.on('child_changed',function(childsnapshot,prevchildname){
      ref.push("I hear you!");
    }) ;
    

    请注意,使用StackOverflow调试代码效率非常低。由于您似乎在Windows上,我建议安装Visual Studio及其节点工具。他们有一个很棒的调试器,可以让你逐步完成代码。在回调中设置一个断点(所以在ref.push行中),会很快显示出现了什么问题。