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

我正在尝试使用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()方法运行一个脚本?

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

  1. 您将值推送到https://mydatabase.firebaseio.com/users/
  2. on('child_changed'事件在脚本中触发
  3. 你的脚本在价值下推动一个新的孩子
  4. 所以我们回到步骤2并重复

由于Firebase客户马上就开始本地事件,因此也会发生得非常快。

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

 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来debugging代码是相当低效的。 由于您似乎在Windows上,我build议安装Visual Studio及其节点工具。 他们有一个伟大的debugging器,可以让你单步执行代码。 在callback中设置一个断点(所以在ref.push ),会很快显示出错。