使用URL从Firestore检索文档

时间:2020-06-26 00:00:32

标签: javascript google-cloud-firestore

我有一个具有这种结构的Firestore数据库。

-user [root collection]
 --userid [doc]
   --work [sub collection]
     --documentID [document with required data]

我希望用户能够单击给定的链接,例如:

mysite.com/work.html?work=documentID

这将打开页面mysite.com/work.html并将数据从documentID提取到页面,并在命名文档中向用户显示数据。

或者,他们可以输入的网址;

mysite.com/users/work/documentID. 

,并显示相同的信息。

在执行任何操作之前,用户始终处于登录状态。 Stack是Firestore,Firebase托管,节点和云功能,jQuery。

我想知道我是否很愚蠢,但是我真的不知道如何开始进行这项工作-在各种搜索方式上做到空白,所以我非常感谢一些帮助!

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式解决此问题-

当用户单击链接mysite.com/work.html?work=documentID时,创建一个将处理给定请求的路由器。由于用户已经登录,因此您可以从请求中收集uid和documentId。在Firestore中,您可以使用col/doc/subcollection

之类的路径引用嵌套文档

第二个创建函数来处理路由,该路由将从Firestore中检索数据,就像这样-

document_read.js

const admin = require('firebase-admin');
admin.initializeApp
const db = admin.firestore();
async function readData(uid, docId){
  const snapshot = await db.collection('users/${uid}/work').doc(docId).get();
  const data = snapshot.data();
  //Do something with your data and return results here
}

此功能会将数据返回到需要显示详细信息的页面。

最后,您将需要使用安全规则保护Firestore数据免受未经授权的请求,以仅允许文档所有者读取/写入数据-

firestore规则

service cloud.firestore {
    match /databases/{database}/documents {
        match /users/{userId} {
            allow read, write: if request.auth.uid == userId;
        }
    }
}

您可以在此处阅读更多内容。

希望这会有所帮助!