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

How do I Implement a Node.Js server-side event listener for Firebase?

我正在尝试使用 firebase 的 Node.js 包来监听我的 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. 您将一个值推送到 https://mydatabase.firebaseio.com/users/
  2. on('child_changed' 事件在您的脚本中触发
  3. 您的脚本在值
  4. 下推送一个新的 child
  5. 所以我们回到第 2 步并重复

它也会很快发生,因为 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!");
}) ;

请注意,使用 Whosebug 调试代码效率很低。由于您似乎在 Windows,我建议安装 Visual Studio 及其节点工具。他们有一个很棒的调试器,可以让你单步调试代码。在你的回调中设置一个断点(所以在 ref.push 行),会很快告诉你哪里出了问题。