代码之家  ›  专栏  ›  技术社区  ›  manidos

firestore模拟器中的“空值错误”

  •  2
  • manidos  · 技术社区  · 6 年前

    我想复制一个官方Firestore的例子 docs . 你需要知道的一切都在屏幕截图上。是虫子还是我遗漏了什么?

    enter image description here

    3 回复  |  直到 6 年前
        1
  •  14
  •   manidos    6 年前

    问题是根本没有实际的文件 /cities/moscow

        2
  •  5
  •   funct7    5 年前

    再多解释一点,曼尼多斯的回答就不错了。

    好像 resources 应仅用于涉及已编写数据的规则;例如 delete , read update 等等。

    如果要对“将”写入的数据设置规则,请使用 getAfter .

        3
  •  3
  •   Jay    6 年前

    关键是要通读评论。

    许多应用程序将访问控制信息存储为中文档的字段 基于文档数据拒绝访问:

    然后

    如果您查看指南中提供的示例数据

    let citiesRef = db.collection("cities")
    citiesRef.document("SF").setData([
        "name": "San Francisco",
        "state": "CA",
        "country": "USA",
        "capital": false,
        "population": 860000,
        "regions": ["west_coast", "norcal"]
    ])
    

    如果要使用该数据集,请为每个城市添加“可见性”字段,并将其值设置为“公共”

     citiesRef.document("SF").setData([
            "name": "San Francisco",
            "visibility": "public"
    
        4
  •  1
  •   Johan Witters    4 年前

    正如马尼多斯所指出的那样,问题在于文件/城市/莫斯科不存在,因此无法访问该文件。但是,指定规则的更简洁的方法是:

    allow read: if (resource == null) || (resource.data.visibility == 'public')
    

    它允许应用程序查询不存在的数据,而不会出现安全异常。

        5
  •  0
  •   user2522885    3 年前

    我还在学习,但问题是

    允许读取:如果 (资源==空) || (resource.data.visibility =='公共')

    是什么时候用这样的规则/ {doc}

    根据我所能拼凑的内容,必须使用get(…)语句直接访问文档的数据,只要在可以返回1个或多个文档的匹配中,那么

    获取(/database/…)。data.visibility =='公共'