【问题标题】:Is it possible to access firebase on both server side and client side in NodeJS?是否可以在 NodeJS 的服务器端和客户端访问 firebase?
【发布时间】:2020-04-28 03:16:12
【问题描述】:

我正在开发一个应用程序,它需要在客户端(捕捉“on”事件以获取最近添加的数据)和服务器端(向数据库添加记录)访问 firebase 数据库。我不确定我是否正确地在客户端和服务器上都需要使用 2 个 db 实例,或者在服务器上创建 1 个并在客户端上使用它,因为我在本地收到警告说 Firebase 已经在全局范围。

这就是我在服务器端声明 db 实例的方式,效果很好:

var admin = require("firebase-admin");
var serviceAccount = require("../config/sterminal-0000-firebase-adminsdk-bvuit-ce5ee771bc.json");

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://sterminal-0000.firebaseio.com"
});

module.exports.admin = admin;

...

const {admin} = require('../extra/firebase');
let db = admin.database();

这就是我在客户端声明 db 实例的方式

包含 pug 模板的库

script(src="https://www.gstatic.com/firebasejs/7.14.2/firebase-app.js")
script(src="https://www.gstatic.com/firebasejs/7.14.2/firebase-database.js")
script(src="/javascripts/local.js" crossorigin="anonymous")

本地脚本中:

var firebaseConfig = {
    apiKey: "AIzaSyCkip7lcHNNodJNhrO5n0Hog5Kvs100000",
    authDomain: "sterminal-00000.firebaseapp.com",
    databaseURL: "https://sterminal-00000.firebaseio.com",
    projectId: "sterminal-8bf73",
    storageBucket: "sterminal-00000.appspot.com",
    messagingSenderId: "961511900000",
    appId: "1:96151100000:web:f3cec40f38f7b7d4000000"
};

firebase.initializeApp(firebaseConfig);

firebase.database().ref("messages").on("child_added", function (snap) {
        console.log(snap.val().message);
}); // ----> DOES NOT WORK

我收到本地警告

logger.ts:115 [2020-04-27T18:43:48.559Z]  @firebase/app: 
    Warning: Firebase is already defined in the global scope. Please make sure
    Firebase library is only loaded once.

【问题讨论】:

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


    【解决方案1】:

    是的,您可以从客户端 Node.js 和服务器端 Node.js 访问 Firebase 实时数据库。但是 SDK 是独立的,您不能将它们都包含在一个项目中。后者似乎是导致您现在遇到的错误的原因。

    【讨论】:

    • 感谢您的回答,但是如果我在本地脚本上删除了SDK,如何访问在服务器上创建的db实例?
    • 如果我删除客户端 SDK。它说“firebase.database 不是函数”
    • 您需要在服务器端代码和客户端代码中都有相关的 SDK。但是您需要以某种方式将它们包括在内,以免它们干扰。从您在问题中分享的内容来看,我看不出干扰来自何处,但错误消息很清楚就是这种情况。
    • 如果我在客户端代码上添加 2 个 lib 文件,则会出现此问题。我不知道如何让他们不干涉。
    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 2020-10-03
    • 2011-07-04
    • 2013-02-02
    • 2015-02-11
    • 2021-10-03
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多