Вы должны инициализировать свое приложение ровно один раз, а затем повторно использовать эту ссылку. Есть несколько способов сделать это, но я предпочитаю импортировать firebase.ts
(который инициализирует приложение и службы Firebase) в мой index.ts
(или какова бы ни была ваша точка входа). Затем я передаю ссылку на любые другие файлы, которые нуждаются в конкретной службе. Я использую TypeScript, поэтому настройте его по мере необходимости, если вы используете vanilla JS.
firebase.ts
import * as admin from 'firebase-admin';
// Initialize our project application
admin.initializeApp();
// Set up database connection
const firestoreDb: FirebaseFirestore.Firestore = admin.firestore();
firestoreDb.settings({ timestampsInSnapshots: true });
export const db = firestoreDb;
Мой файл index.ts импортирует его:
import { db } from './firebase';
Затем, когда я настрою свои маршруты с помощью Express, у меня будет каждый маршрут в другом файле со своей функцией. Затем передайте ссылку на БД на любой, кому это нужно.
app
.route('events')
.get((req: Request, res: Response) => {
get_events(db, res);
return;
});
Вот сообщение в блоге, где я объясняю это немного подробнее:
https://medium.com/@jasonbyrne / с практическими рекомендациями -structure-a-serverless-rest-api-with-firebase-functions- express -1d7b93aaa6af
Если вам не нравится метод внедрения зависимостей или вы предпочитаете только отложенную загрузку сервисов Вы должны, вы могли бы go другой это по-другому. В этом методе у вас будет файл firebase.js
(или как вы его называете), который вы импортируете на любые страницы, которые в нем нуждаются, и вызываете функцию для загрузки этой службы. Здесь я просто делаю Firestore, но вы можете создать аналогичные функции для ссылок на другие сервисы.
Просто напечатайте это как пример ...
import * as admin from 'firebase-admin';
// Initialize our project application
admin.initializeApp();
// Database reference, not yet loaded
let db: FirebaseFirestore.Firestore | null = null;
// Get cached db reference or create it
export function getDatabaseReference() {
if (db === null) {
db = admin.firestore();
}
return db;
}
Надеюсь, это поможет. Дайте мне знать, если у вас есть какие-либо вопросы.