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

use*_*214 7 node.js express firebase firebase-realtime-database

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

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

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

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

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

    res.send(req.params.id);
});
Run Code Online (Sandbox Code Playgroud)

我收到错误:

firebase is not defined.
Run Code Online (Sandbox Code Playgroud)

那么我尝试将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);
});
Run Code Online (Sandbox Code Playgroud)

我收到控制台错误:

Firebase App named '[DEFAULT]' already exists.
Run Code Online (Sandbox Code Playgroud)

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

pet*_*teb 7

在Node中,所有模块都是"Singletons",在Node.js文档中也称为模块缓存.如果你打电话给initializeApp()你一次app.js,然后需要firebase在你的路由器再次,你的路由器firebase实际上将拥有相同的全局设置为firebase你的app.js.这就是你收到错误的原因Firebase App name '[DEFAULT]' already exists.

一旦您打电话initializeApp(),您的代码中的任何其他地方都不app.js需要进行后续调用initializeApp().无论何时何地您需要与firebase进行交互require('firebase')并使用它.