【问题标题】:Nodejs app with new Firebase does not retrieve database items具有新 Firebase 的 Nodejs 应用程序无法检索数据库项目
【发布时间】:2016-09-19 16:01:54
【问题描述】:

我是 nodejs 的新手,但在 Firebase 版本 3.0.2 中已经有一个可以工作的 js 客户端程序。事实证明,我需要一个服务器来完成一些在 js 客户端中不可能完成的简单事情。

当我在 nodejs 中尝试这个基本的东西时,什么也没有发生——数据库中的数据永远不会被检索到,并且节点服务器程序继续运行而没有错误。服务端程序(server.js)如下:

var firebase = require("firebase");

var myApp =firebase.initializeApp({
    serviceAccount: "xxx/xxx.json",
    databaseURL:  "https://xxx.firebaseio.com"
});


firebase.database().ref().on('value', function(snapshot) {
    console.log("urls value changed");   // NEVER GETS HERE
    console.log(snapshot.val());
});

数据库已加载数据,并且正在尝试查看根目录。当我通过控制台将项目添加到数据库时,仍然没有任何反应。更具体的 ref() 值无效。

我正在使用节点版本 v4.4.4。该程序在命令行(在 MBP/OSX 上)使用“node server.js”调用。

我花了好几个小时试图找出我做错了什么——可能是一些愚蠢的事情!提前感谢您的帮助。

【问题讨论】:

  • 您的程序很可能只是在(异步)on() 从服务器获取值之前退出。所以你的回调永远不会被调用。例如,请参阅有关如何保持进程活跃的答案:stackoverflow.com/questions/23622051/…
  • 我遇到了同样的问题,我也使用他们的快速启动项目github.com/firebase/quickstart-nodejs/tree/master/database 进行了测试,但仍然没有运气。我认为这是他们的错误
  • @FrankvanPuffelen:进程永远不会退出 - 它似乎在等待数据库事件,但从未得到它。
  • 附加一个错误处理程序,以便您查看是否有问题。 firebase.database().ref().on('value', function(snapshot) { ... }, function(error) { console.error(error); })
  • 使用错误处理程序,它仍然只是坐着,什么也不做。

标签: node.js firebase firebase-realtime-database


【解决方案1】:

已修复!

  1. 添加了调试,这是必不可少的:

    firebase.database.enableLogging(true)

  2. 发现有一个无效的令牌,并且不断被断开/重新连接以重试。日志中的行如下:

    p:0: 来自服务器:{"r":2,"b":{"s":"invalid_token","d":"访问被拒绝。"}}

    (注意:没有日志记录,这完全是沉默的!)。

  3. 原来服务帐户没有正确创建!您必须先确定服务条款!为此:转到https://console.cloud.google.com/

  4. 重新创建了一个新的服务帐户并将其连接起来 - 最后,它可以工作了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多