Как запросить базу данных Firestore из веб-приложения вне того же проекта Firebase - PullRequest
0 голосов
/ 29 декабря 2018

Проблема

Я создаю веб-сайт для мобильного приложения, приложение A. Я использую Firebase для размещения своего веб-сайта.Веб-сайт связан с тем же проектом Firebase, что и приложение A. Другое мобильное приложение, которое я уже разработал, App B, имеет базу данных FireStore, которую я хочу использовать в качестве источника данных «новостей» для веб-сайта приложения A.База данных приложения B находится в другом проекте Firebase, чем веб-сайт приложения A. Я не могу соединить соединение между веб-сайтом приложения A и базой данных приложения B.

AC

Используя Firebase, успешно выполнить запросданные из базы данных приложения B с веб-сайта приложения A.

Используйте переменные конфигурации среды firebase для хранения личных учетных данных базы данных приложения B.

Настройка

Режим разработчика включен в базе данных приложения B (разрешить все).

Файл запуска веб-приложения A ...

    functions = require("firebase-functions");
    const firebase = require("firebase-admin");
    downloadNews = require("./db/news/downloadLatestNews");
    transporter = require("./middleware/transport");
    const appA = firebase.initializeApp();
    appADatabase = appA.firestore();
    appADatabase.settings({timestampsInSnapshots:true});

    const appB = firebase.initializeApp({
        credential: firebase.credential.cert({
               projectId: functions.config().appB.project_id,
               clientEmail: functions.config().appB.client_email,
                privateKey: functions.config().appB.private_key.replace(/\\n/g, '\n')
          }),
          databaseURL: functions.config().appB.database_url
       }, "AppB");
   appBDatabase = firebase.firestore(appB);
   appBDatabase.settings({timestampsInSnapshots:true});

Модуль внутри Web App A для запроса из базы данных App B ...

Эта функция вызывается каждый раз, когда пользователь отправляет запрос на маршрут / news в Web App A.

const Post = require("../../models/post");

exports.downloadRecent = function() {
  var ref = appBDatabase.collection("users").doc(functions.config().appB.user_id).collection("post_storage");
  ref = ref.where('is_public', '==', true);
  ref = ref.limit(16);
  console.log(ref);

  return ref.get().then(snapshot => {
    if (!snapshot.exists) {
        console.log("No documents exist for userID: " + functions.config().appB.user_id);
        // Gonna pass back a generic check again soon
        return null;
    }

    const docs = snapshot.docs;
    // Empty array of post prms to return
    console.log("The snapshot returned: " + docs);
    var all_prms = [];
    // Create each doc as a post
    docs.forEach(doc => {
        var post = new Post(doc.data());
        console.info("Post data: " + doc.data());
        all_prms.push(post);
    });
    return Promise.all(all_prms);
 })
 .catch(err => {
    console.log("Error getting posts: " + err);
    return;
 });
};

Результаты

Каждая попытка запроса данных из базы данных приложения B не возвращает никаких документов.Я могу проверить, существуют ли документы и соответствуют ли они критериям для запроса.

Буду очень признателен за любые советы о том, что я могу делать неправильно.В заключение я должен сказать, что я не веб-разработчик и у меня мало опыта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...