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

Dil*_*ous 5 javascript node.js windows-8 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!");

} ) ;
Run Code Online (Sandbox Code Playgroud)

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

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Run Code Online (Sandbox Code Playgroud)

我对服务器端编程很陌生,不知道该怎么做。我一定是遗漏了一些重要的东西。我应该先用 node 设置特殊的服务器设置吗?或者制作一个守护进程,每秒左右使用一次()方法运行一个脚本?

Fra*_*len 3

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

  1. 你把一个值推到https://mydatabase.firebaseio.com/users/
  2. on('child_changed'事件在您的脚本中触发
  3. 您的脚本将一个新子项推入该值
  4. 所以我们回到步骤 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!");
}) ;
Run Code Online (Sandbox Code Playgroud)

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