Firestore引用会创建“ TypeError:将圆形结构转换为JSON”

时间:2019-01-28 21:20:15

标签: firebase firebase-realtime-database google-cloud-firestore vuefire

我正在Vue JS应用程序中使用Firebase的Firestore:

"firebase": "^5.8.0",
"vue-firestore": "^0.3.16",

当我尝试获取包含引用另一个文档(Firestore中的引用类型)的字段的文档时,出现以下错误:

[Vue warn]: Error in render: "TypeError: Converting circular structure to JSON"

每当我将文档中该字段的类型更改为字符串时,它似乎都可以正常工作。

我了解这是由于Firestore JS SDK中的某些内容正在尝试将文档(以及文档随附的一堆元数据)序列化为JSON,并且某处有循环引用?

在我的数据结构和字段中,我没有循环引用。仅仅是引用另一个文档的一个字段,被引用的文档就不再引用任何其他文档。

我获取数据的代码是:

methods: {
      getContent() {
        const db = this.$firebase.firestore();
        db
          .collection('places')
          .doc(this.$route.params.placeKey)
          .orderBy('name')
          .get()
          .then(snap => {
            this.places = []

            snap.forEach(doc => {
              this.places.push(doc.data())
            })
          })
      }

所以我的问题是:

1)首先,我在代码中做错了什么吗?即使没有出现错误,Firestore的JS SDK也会为我解决该引用吗?还是我必须调用引用并自己解析以获取引用文档的数据? 2)当您拥有可以引用的文档时,Firestore的最佳实践是什么?您应该使用参考吗?什么时候?您什么时候可以进行非规范化?

谢谢!

1 个答案:

答案 0 :(得分:0)

要回答关于存储引用的第二个问题:实际上,在撰写此答案时,存储引用(即路径元素)没有真正的优势类型为Reference,而不是将它们存储为String。

请观看Firebase https://www.youtube.com/watch?v=Elg2zDVIcLo&t=274s上的官方视频,其中包含详细说明(从4:34开始)。