Express JS: отправлять базу данных как переменную / параметр, когда требуется модуль - PullRequest
0 голосов
/ 14 марта 2020

Допустим, у меня есть следующий код

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const serviceAccount = require("./permissions.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://blah-blah-blah.firebaseio.com"
});
const db = admin.firestore();
app.use("/auth", require("./auth"));

Теперь проблема в том, что мне нужно использовать функциональность облачной базы данных firestore, которая в настоящий момент хранится в переменной db, в моем файле аутентификации. js а также без использования admin.initializeApp во второй раз. Есть ли какой-нибудь способ сделать это, например, импортировать / экспортировать переменную db et c.

. Здесь я использую ее в аутентификации. js:

 const express = require("express");
  const auth = express.Router();
  db.collection("data")
      .doc("sample")
      .get()
      .then(
        document => {
          if (document.exists) {
            return done(null, {
              id: user.id,
              name: user.name,
              email: user.email
            });
          } else {
            //create document
          }
        },
        err => {
          //handle error
        }
      );

Конечно, прямо сейчас БД будет неопределенным, и это проблема, которую мне нужно решить

1 Ответ

2 голосов
/ 14 марта 2020

Начиная с версии 1.0.0 Firebase SDK для облачных функций вы должны инициализироваться с помощью admin.initializeApp();, см. Do c здесь .

Затем, чтобы взаимодействовать с Firestore вам просто нужно использовать Admin SDK , например, следующим образом:

admin.firestore().collection('....').get();

Так что, если я правильно понимаю ваш вопрос, следующие изменения должны помочь:

index. js

const functions = require("firebase-functions");
const admin = require("firebase-admin");

admin.initializeApp();

//const db = admin.firestore();   not sure you need that here, it depends if you interact (or not) with Firestore in index.js

app.use("/auth", require("./auth"));

auth. js

const admin = require("firebase-admin");
const db = admin.firestore();
//....
db.collection("data")
      .doc("sample")
      .get()
      .then(
        document => {
          if (document.exists) {
            return done(null, {
              id: user.id,
              name: user.name,
              email: user.email
            });
          } else {
            //create document
          }
        },
        err => {
          //handle error
        }
      );
//....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...