在Node.JS/express中全局访问Firebase

11

在我的主要 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在我的所有路由文件中都可访问?谢谢!

1个回答

11
在Node中,所有模块都是“单例”,也被称为模块缓存在Node.js文档中。如果你在app.js中调用initializeApp()一次,然后在你的路由器中再次要求firebase,你的路由器的firebase实际上将具有与app.js中的firebase相同的全局设置。这就是为什么你会得到错误Firebase App name '[DEFAULT]' already exists的原因。
一旦你在app.js中调用了initializeApp(),就不需要在代码的任何其他地方进行后续调用。无论何时/在哪里需要与firebase交互,只需require('firebase')并使用它即可。

只需在需要访问该.js文件的任何地方执行require('./path/to/js/file');即可。模块文档 - peteb
当我使用 var classes = require('../routes/Classes'); 或者 var classes = require('../routes/Classes'); 导入类时,为了测试它们是否被成功导入,我使用 console.log(classes); 命令,但是输出结果却是 {}Classes.js 文件中包含了多个不同的类。 - user82395214
当我尝试调用classes.Queue()(一个位于classes中的函数)时,出现了 classes.Queue()不是一个函数的错误。 - user82395214
@KieranGill 你是否正在使用module.exports导出你想在Classes.js中调用的函数? - peteb
我应该在 Classes.js 中想要调用的函数周围加上 module.exports = { // code },对吗?但是我收到了错误信息 TypeError: Router.use() requires middleware function but got a Object - user82395214
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接