【问题标题】:Accessing Firebase in Node.JS/express globally在 Node.JS/express 中全局访问 Firebase
【发布时间】:2017-02-19 14:34:10
【问题描述】:

在我的主 express 文件 app.js 中,我设置了 Firebase:

var firebase = require("firebase");
firebase.initializeApp({
  serviceAccount: "../Wrapper-adfd67bc8c36.json",
  databaseURL: "https://wrapper.firebaseio.com"
}); 

但是当我尝试在路由文件中访问它时:

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

router.get('/:id', function(req, res, next) {
    functionThatUsesFirebase(req.params.id);

    res.send(req.params.id);
});

我得到错误:

firebase is not defined.

然后我尝试将 Firebase 添加到路由文件本身:

var express = require('express');
var router = express.Router();
var firebase = require("firebase");
firebase.initializeApp({
  serviceAccount: "../Wrapper-adfd67bc8c36.json",
  databaseURL: "https://wrapper.firebaseio.com"
});

router.get('/:id', function(req, res, next) {
    functionThatUsesFirebase(req.params.id);

    res.send(req.params.id);
});

我得到控制台错误:

Firebase App named '[DEFAULT]' already exists.

如何让我的所有路由文件都可以访问 Firebase?谢谢!

【问题讨论】:

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


    【解决方案1】:

    在 Node 中,all modules are "Singletons",在 Node.js 文档中也称为 Module Caching。如果您在app.js 中调用initializeApp() 一次,然后在路由器中再次要求firebase,则路由器的firebase 实际上与app.js 中的firebase 具有相同的全局设置。这就是您收到错误 Firebase App name '[DEFAULT]' already exists 的原因。

    一旦您在app.js 中调用initializeApp(),则无需在代码中的其他任何位置对initializeApp() 进行后续调用。无论何时何地,您只需 require('firebase') 与 firebase 交互并使用它。

    【讨论】:

    • 谢谢!另外,初学者问题,但我习惯于将所有 .js 文件链接到 .html 文件中,它们都可以相互引用。有没有办法从路由器文件中引用 .js 文件?
    • 只要在需要访问.js 文件的任何地方执行require('./path/to/js/file');Module docs
    • 当我console.log(classes); 只是为了测试是否使用var classes = require('../routes/Classes');var classes = require('../routes/Classes'); 导入类时,我得到{}Classes.js 只是一个包含不同类的文件。
    • 当我尝试classes.Queue()(类中的函数)时,我得到classes.Queue()不是函数的错误。
    • @KieranGill 您实际上是在使用module.exports 导出要在Classes.js 中调用的函数吗?
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 2022-08-04
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2014-12-20
    相关资源
    最近更新 更多