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

在我的主要快递文件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中, 所有模块都是“单例” ,在Node.js文档中也称为模块caching 。 如果您在app.js调用initializeApp()一次,然后在路由器中再次请求app.js ,那么您的路由器的firebase实际上与app.js中的app.js具有相同的全局设置。 这就是获取错误的原因Firebase App name '[DEFAULT]' already exists

一旦你在你的app.js调用了initializeApp() ,就不需要在你的代码中的其他任何地方调用initializeApp() 。 无论何时何地需要与Firebase交互只require('firebase')并使用它。