Javascript 使用URL从Firestore检索文档

Javascript 使用URL从Firestore检索文档,javascript,google-cloud-firestore,Javascript,Google Cloud Firestore,我有一个具有这种结构的Firestore DB -user [root collection] --userid [doc] --work [sub collection] --documentID [document with required data] 我希望用户能够单击他们获得的链接,例如: mysite.com/work.html?work=documentID 这将打开mysite.com/work.html页面,将数据从documentID拉入页面,并将命名文

我有一个具有这种结构的Firestore DB

-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. 
并显示相同的信息

用户在采取任何操作之前都会先登录。 堆栈是Firestore、Firebase托管、节点和云函数、jQuery


我不知道我是不是很笨,但我真的不知道如何开始做这项工作——在各种各样的搜索中找到一个空白来寻找如何做到这一点,所以我真的很感谢一些帮助

您可以用以下方法解决此问题-

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

第二个创建函数来处理路由,它将从firestore中检索数据,如下所示-

文件_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
}
service cloud.firestore {
    match /databases/{database}/documents {
        match /users/{userId} {
            allow read, write: if request.auth.uid == userId;
        }
    }
}
此函数将数据返回到需要显示详细信息的所需页面

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

消防商店规则

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
}
service cloud.firestore {
    match /databases/{database}/documents {
        match /users/{userId} {
            allow read, write: if request.auth.uid == userId;
        }
    }
}
你可以在这里读更多


希望这有帮助

那看起来很有用,谢谢。很抱歉,在查看答案时耽搁了很长时间。最后我使用了一个urlparms查询。然而,我对你的回答很感兴趣。当你说“创建一个路由器来处理给定的请求”时,你没有说在哪里、做什么以及如何。。。这就是我困惑的地方,路由器是在哪里创建的?用什么?我仍然有兴趣找到一些例子来说明如何做到这一点。@Dan Leighton您能为这个问题添加答案吗?即使urlparam也可以