我正在为移动应用程序App A构建网站。我正在使用Firebase托管我的网站。该网站与与App A相同的Firebase项目相关联。我已经开发的另一个移动应用程序App B,具有一个Firestore数据库,我希望将其用作App A网站的“新闻”数据源。 App B的数据库与App A的网站位于不同的Firebase项目中。我无法桥接App A的网站与App B的数据库之间的连接。
使用firebase,从App A的网站成功查询App B的数据库中的数据。
使用firebase环境配置变量存储App B数据库的专用凭据。
在App B的数据库中启用了开发人员模式(允许所有操作)。
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的“ / 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的数据库查询数据均不会返回任何文档。我可以验证文档是否存在并符合查询条件。
任何对我可能做错事情的建议都将不胜感激。最后,我要指出我不是网络开发人员,并且经验不足。