【问题标题】:Having trouble connecting to my Firebase database - Node & Express连接到我的 Firebase 数据库时遇到问题 - Node 和 Express
【发布时间】:2018-06-19 04:10:59
【问题描述】:

我仍在学习一般的编程,如果我没有意义,请见谅。

我正在尝试连接到我的 firebase 数据库,但我收到了 PERMISSION_DENIED 错误。我的 firebase 中的数据库设置为测试模式,因此任何人都应该能够访问它。

我还添加了基于 firebase 文档所需的所有 npm 包。

如果我需要提供更多信息,请告诉我。

我不确定我在这里做错了什么。有人会知道吗?任何帮助表示赞赏。

这是我的模块文件

var express = require('express');
var firebase = require('firebase');

// Initialize Firebase
var config = {
  apiKey: "apikey",
  authDomain: "authdomain",
  databaseURL: "databaseurl",
  storageBucket: "storagebucket"
};

firebase.initializeApp(config);

var db = firebase.database();
var ref = db.ref("/users");

ref.on("value", function(snapshot) {
  console.log(snapshot.val());
}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});


var index = require('./routes/index');
app.use('/', index);

module.exports = app;

这是我的路线/index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'The Title' });
});

module.exports = router;

【问题讨论】:

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


【解决方案1】:

所以我想出了一种正确连接到我的 firebase 数据库的方法。我不确定这是否是最好的方法,但我做的第一件事是删除当前数据库并重新创建它(不确定这是否有帮助或需要,但我只是想要一个全新的安装,以防之前出现问题。)

然后在我的 firebase 数据库仪表板中,我转到仪表板屏幕左上角“项目概述”标题旁边的“齿轮图标 => 项目设置”。在 Firebase Admin SDK 下,我点击了底部的“生成新私钥”按钮。

这给了我一个 .json 文件,该文件已下载到我的计算机上。我将下载的文件名更改为更简单的名称,例如 myfirstapp-firebase-db.json。我将此文件添加到存储节点 js 的文件夹中。

在我开始编写代码以连接到我的 firebase 数据库之前,我必须确保我的“Database => Rules”设置为 true,以获得我的 firebase 项目中的读写权限。

数据库规则设置:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

在完成配置 firebase 所需的一切后,我只需配置我的 module.js 文件即可正确连接。以下是连接到 Firebase 所需的代码。两个重要的东西是“serviceAccount”和“databaseURL”.....

var firebase = require('firebase');

// Initialize firebase
firebase.initializeApp({
  serviceAccount: "./<your-service-account-url>-firebase-db.json",
  databaseURL: "https://<your-database-url>.firebaseio.com/"
});

var db = firebase.database();
var ref = db.ref("/users");

.....“serviceAccount”是从上面的“生成新私钥”步骤下载的 .json 文件的路由。您可以在 firebase 内白色块顶部的“数据库”仪表板中找到 databaseURL。我只是将该 url 复制并粘贴到 databaseURL 中。

然后我将 firebase.database() 放入 var = db 中,然后指定 ref。

此时我的连接成功,当我执行节点 modules.js 时,它在控制台中向我显示了 ref 数据库中的所有内容。确保在数据库中有一些预先填充的字段,以便控制台向您显示其中的所有项目。我希望这可能对某人有所帮助,如果有人知道这样做的更好方法,我很想知道您的建议!

【讨论】:

    【解决方案2】:

    异步侦听器:存储在 Firebase 实时数据库中的数据是通过将异步侦听器附加到 数据库参考。侦听器在初始时触发一次 数据的状态,并在数据更改时再次。一个事件 侦听器可能会收到几种不同类型的事件。

    有用的链接https://firebase.google.com/docs/database/admin/retrieve-data

    您需要创建一个与您的数据库路径相对应的引用变量

    var ref = db.ref("server/saving-data/fireblog/posts");

    然后您将附加一个异步回调以读取引用处的数据

        ref.on("value", function(snapshot) {
          console.log(snapshot.val());
        }, function (errorObject) {
          console.log("The read failed: " + errorObject.code);
        });
    

    我相信您对 PERMISSION_DENIED 的问题是您正在使用

    var db = firebase.database();

    而不是

    var db = admin.database();

    【讨论】:

    • 感谢您为我指明了正确的方向。所以我添加了 var ref = db.ref("/users");然后是 ref.on() 的以下代码块。当我 console.log(ref) 说的是 PERMISSION_DENIED。您能否让我知道从哪里开始,以便我可以正确进入我的数据库?
    • 也使用此信息编辑了我的帖子,但我相信您对 PERMISSION_DENIED 的问题是您使用的是var db = firebase.database(); 而不是var db = admin.database();
    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2019-12-16
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多