【问题标题】:Firebase Database Push is generating Key but changes is not showing onFirebase 数据库推送正在生成密钥,但未显示更改
【发布时间】:2018-08-28 22:58:03
【问题描述】:

我正在尝试创建 Node Js 服务器,在该服务器中调用特定的 rest api 它将更改 firebase 中的一些数据。

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var admin = require("firebase");

admin.initializeApp({
  serviceAccount: './<some-name>nsdk-dgimw-1cab1079fa.json',
  databaseURL: "https://<some-name>.firebaseio.com"
});

// define a simple route
app.get('/', function(req, res){
    res.json({"message": "Welcome to EasyNotes application. Take notes quickly. Organize and keep track of all your notes."});
});

app.get('/getMe', function(req, res){
    var ref = admin.database().ref();
    var childBlog = ref.child('/bloggers');
    // var userRef = childBlog.push();


    var userRef = childBlog.push({
        name: 'Christopher',
        description: 'I eat too much ice cream'
    });
    console.log('user key', userRef.key);

    var myInt = setTimeout(function () {
        console.log("Hello");
    }, 10000);
});

// listen for requests
app.listen(3000, function(){
    console.log("Server is listening on port 3000");
});

这段特定的代码正在创建一个服务器,并且 rest api 调用工作正常。但是当我插入 firebase 推送代码时,它会记录生成的推送密钥,但是当我访问 firebase 数据库时,我发现没有任何变化。

我关注了这个article

我想知道我做的事情是否正确,如果不正确,正确的解决方案是什么?

数据库结构--

-tech-bloggie
  -articles
  -bloggers
  -comments



Warning :
@firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"getaddrinfo ENOTFOUND accounts.google.com accounts.google.com:443\"."}

【问题讨论】:

  • 你的数据库有/bloggers子吗?
  • @ShababbKarim 是的,我在数据库中有博客作者作为孩子

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


【解决方案1】:

预期的 SDK 是 firebase-admin

$ npm install firebase-admin --save

所以,在你的情况下,它会是:

var admin = require('firebase-admin');

更新 SDK,您的代码按预期工作:

您更新的代码:

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var admin = require('firebase-admin');

var serviceAccount = require("./config/serviceAccountKey.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://shining-fire-7601.firebaseio.com"
});

// define a simple route
app.get('/', function(req, res){
    res.json({"message": "Welcome to EasyNotes application. Take notes quickly. Organize and keep track of all your notes."});
});

app.get('/getMe', function(req, res){
    var ref = admin.database().ref();
    var childBlog = ref.child('/bloggers');
    // var userRef = childBlog.push();


    var userRef = childBlog.push({
        name: 'Christopher',
        description: 'I eat too much ice cream'
    });
    console.log('user key', userRef.key);

    var myInt = setTimeout(function () {
        console.log("Hello");
    }, 10000);
});

// listen for requests
app.listen(3000, function(){
    console.log("Server is listening on port 3000");
});

预期的控制台日志输出:

# node stack
Server is listening on port 9084
user key -L82E-smqbJ7CDMBXK4K
Hello
user key -L82ETNDTdGa6jZqbFQ1
Hello
user key -L82Ex-SWQq_hPV1YRBt
Hello

还有 Firebase 控制台:

注意您的警告:必须正确配置 SDK:https://firebase.google.com/docs/admin/setup?hl=en-419

基本上,你需要这个:

admin.initializeApp({
  credential: admin.credential.cert({
    projectId: '<PROJECT_ID>',
    clientEmail: 'foo@<PROJECT_ID>.iam.gserviceaccount.com',
    privateKey: '-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n'
  }),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

这是你需要做的:

"初始化 SDK - 创建 Firebase 控制台项目并下载包含服务帐户凭据的 JSON 文件后,您可以使用以下代码初始化 SDK sn-p..."

【讨论】:

  • 什么是收集器数据库?
  • 嗨@ShubhamAgarwalBhewanewala,请尝试我的更新答案并告诉我
  • 是的,我再试一次,我之前试过但没有得到任何回应
  • 但我收到一个警告
  • @ShubhamAgarwalBhewanewala 不,我可以重现您的问题。问题是,您没有对您的 firebase 数据库进行身份验证,您的代码中缺少该部分。要使用 Firebase Admin SDK,您需要一个 Firebase 项目(您已经拥有它)、一个与 Firebase 服务通信的服务帐号,以及一个包含您的服务帐号凭据的配置文件。这最后 #2 项是您所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2019-01-28
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 2021-07-14
  • 2021-06-12
相关资源
最近更新 更多