如何从同一Firebase项目之外的Web应用程序查询Firestore数据库

时间:2018-12-29 16:58:31

标签: node.js firebase google-cloud-firestore

问题

我正在为移动应用程序App A构建网站。我正在使用Firebase托管我的网站。该网站与与App A相同的Firebase项目相关联。我已经开发的另一个移动应用程序App B,具有一个Firestore数据库,我希望将其用作App A网站的“新闻”数据源。 App B的数据库与App A的网站位于不同的Firebase项目中。我无法桥接App A的网站与App B的数据库之间的连接。

AC

使用firebase,从App A的网站成功查询App B的数据库中的数据。

使用firebase环境配置变量存储App B数据库的专用凭据。

设置

在App B的数据库中启用了开发人员模式(允许所有操作)。

Web App的起始文件...

    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的数据库中查询...

每次用户向Web App A的“ / news”路由发出请求时,都会调用此功能。

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

结果

每次尝试从App B的数据库查询数据均不会返回任何文档。我可以验证文档是否存在并符合查询条件。

任何对我可能做错事情的建议都将不胜感激。最后,我要指出我不是网络开发人员,并且经验不足。

0 个答案:

没有答案