无法连接到我的Firebase数据库 - Node&表达

时间:2018-01-10 03:20:47

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

我仍在学习编程,如果我没有意义,那就很抱歉。

我正在尝试连接到我的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;

2 个答案:

答案 0 :(得分:2)

  

异步侦听器:通过将异步侦听器附加到a来检索存储在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();

答案 1 :(得分:1)

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

然后在firebase的数据库仪表板里面,我去了" Gear Icon =>项目设置"在"项目概述"旁边仪表板屏幕左上角的标题。在Firebase Admin SDK下,我点击了"生成新的私钥"底部的按钮。

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

在我开始编写连接到我的firebase数据库的代码之前,我必须确保我的"数据库=>规则"为读取而设置为真在我的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");

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

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

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