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

5

我正在尝试使用Firebase的Node.js包监听数据变化。我正在使用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

我对服务器端编程非常陌生,不知道该怎么做。我一定是遗漏了重要的东西。我应该先设置特殊的node服务器设置吗?还是可以创建一个守护进程,每秒运行一次带有once()方法的脚本?


请访问以下链接以获取有关编程的内容:https://dev59.com/dF8e5IYBdhLWcg3wF3SV 或 https://dev59.com/MWYr5IYBdhLWcg3wg6f9 - AmmarCSE
1个回答

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!");
}) ;

请注意,使用 StackOverflow 调试代码效率相当低下。由于你似乎在使用 Windows,我建议安装 Visual Studio 及其 node 工具。它们拥有一个强大的调试器,可以让你逐步查看代码。在回调函数中设置断点(即在 ref.push 这一行),可以快速显示出问题所在。

哦,那就是我缺少的东西。我应该推送到我的引用而不是子级。我使用 Eclipse,因为我认为 Visual Studio 是付费软件。你说得对,我应该开始学习使用 IDE 进行调试。非常感谢! - Dil manous
以防万一,我认为答案是指 Visual Studio Code (VS Code) 作为编辑器进行尝试,而不是 Visual Studio 套件。这两个产品都来自微软,而 VSCode 针对的是每天都可用的开发人员,可以免费使用。 - zinoadidi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接