2016-10-11 22 views
5

Trong tập tin nhanh chính của tôi, app.js, tôi thiết lập căn cứ hỏa lực:Tiếp cận căn cứ hỏa lực trong Node.js/thể hiện trên toàn cầu

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

Nhưng khi tôi cố gắng truy cập vào nó trong một tập tin định tuyến:

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

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

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

Tôi gặp lỗi:

firebase is not defined. 

Vì vậy, sau đó tôi đã thử thêm Firebase vào tệp định tuyến:

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

tôi nhận được lỗi giao diện điều khiển:

Firebase App named '[DEFAULT]' already exists. 

Làm thế nào tôi có thể làm cho căn cứ hỏa lực thể truy cập đến tất cả các tập tin định tuyến của tôi? Cảm ơn!

Trả lời

6

Trong nút, all modules are "Singletons", còn được gọi là Module Caching trong tài liệu Node.js. Nếu bạn gọi initializeApp() một lần trong số app.js và sau đó yêu cầu lại firebase trong bộ định tuyến của mình, bộ định tuyến firebase của bộ định tuyến sẽ thực sự có cùng cài đặt chung như firebase trong số app.js của bạn. Đây là lý do tại sao bạn nhận được lỗi của mình Firebase App name '[DEFAULT]' already exists.

Khi bạn gọi initializeApp() trong số app.js của mình, bạn sẽ không cần thực hiện các cuộc gọi tiếp theo nào đến initializeApp() ở bất kỳ nơi nào khác trong mã của bạn. Bất cứ khi nào/bất cứ nơi nào bạn cần để tương tác với firebase chỉ require('firebase') và sử dụng nó.

+0

Cảm ơn bạn! Ngoài ra, câu hỏi mới bắt đầu, nhưng tôi đã sử dụng để liên kết tất cả các tệp .js của tôi thành tệp .html, nơi tất cả chúng có thể tham chiếu lẫn nhau. Có cách nào để tham khảo một tập tin .js từ một tập tin router? – user82395214

+0

Chỉ cần 'require ('./ path/to/js/file');' bất cứ nơi nào bạn cần truy cập vào tệp '.js' đó. [Tài liệu mô-đun] (https://nodejs.org/dist/latest-v6.x/docs/api/modules.html#modules_modules) – peteb

+0

Khi tôi 'console.log (lớp);' chỉ để kiểm tra xem các lớp có đang nhận được không được nhập khẩu với 'var classes = require ('../ routes/Classes');' hoặc 'var classes = require ('../ routes/Classes');', tôi nhận được '{}'. 'Classes.js' chỉ là một tệp đầy đủ các lớp khác nhau. – user82395214

Các vấn đề liên quan