全局访问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')
并使用它。