在我的主要快递文件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.
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',next) { functionThatUsesFirebase(req.params.id); res.send(req.params.id); });
我收到控制台错误:
Firebase App named '[DEFAULT]' already exists.
如何让所有路由文件都可以访问Firebase?谢谢!
解决方法
在Node,all modules are “Singletons”中,Node.js文档中也称为
Module Caching.如果您在app.js中调用initializeApp()一次,然后在路由器中再次需要firebase,则路由器的firebase实际上将具有与app.js中的firebase相同的全局设置.这就是为什么您收到错误的原因Firebase应用程序名称'[DEFAULT]’已经存在.
在app.js中调用initializeApp()之后,不需要在代码中的任何其他位置对initializeApp()进行后续调用.无论何时何地您需要与firebase进行交互只需要(‘firebase’)并使用它.