2016-10-11 12 views
5

W moim głównym pliku wyraźnej, app.js, skonfigurować Firebase:Dostęp Firebase w node.js/wyrazić globalnie

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

Ale gdy próbuję uzyskać do niego dostęp w pliku routingu:

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

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

    res.send(req.params.id); 
}); 

pojawia się błąd:

firebase is not defined. 

Więc próbowałem tylko dodawanie Firebase do samego pliku routingu:

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); 
}); 

pojawia się błąd konsoli:

Firebase App named '[DEFAULT]' already exists. 

Jak mogę Firebase dostęp do wszystkich moich plików routingu? Dzięki!

Odpowiedz

6

Węzeł, all modules are "Singletons", określany także jako Module Caching w dokumentach Node.js. Jeśli zadzwonisz pod numer initializeApp() raz do swojego urządzenia app.js, a następnie ponownie będziesz potrzebować firebase w routerze, router firebase będzie miał te same ustawienia globalne co firebase w twoim app.js. To jest powód, dla którego otrzymujesz swój błąd Firebase App name '[DEFAULT]' already exists.

Po wywołaniu initializeApp() w swoim app.js, żadne kolejne połączenia nie będą musiały być wykonywane w żadnym innym miejscu w kodzie. Zawsze i wszędzie, gdzie potrzebujesz interakcji z firebase, wystarczy require('firebase') i użyj jej.

+0

Dziękujemy! Ponadto pytanie początkowe, ale jestem przyzwyczajony do łączenia wszystkich moich plików .js w plik .html, gdzie wszyscy mogą się nawiązywać ze sobą. Czy istnieje sposób odwołania się do pliku .js z pliku routera? – user82395214

+0

Po prostu wykonaj 'require ('./ path/to/js/file');' gdziekolwiek potrzebujesz dostępu do pliku '.js'. [Module docs] (https://nodejs.org/dist/latest-v6.x/docs/api/modules.html#modules_modules) – peteb

+0

Kiedy mam 'console.log (classes);' po prostu do sprawdzenia, czy zajęcia są importowane z 'var classes = require ('../ routes/Classes');' lub 'var classes = require ('../ routes/Classes');', otrzymuję '{}'. 'Classes.js' to po prostu plik pełen różnych klas. – user82395214

Powiązane problemy