【问题标题】:Firebase firestore - Data must be an object, but it was: a custom Object objectFirebase firestore - 数据必须是一个对象,但它是:一个自定义对象对象
【发布时间】:2019-12-19 06:08:24
【问题描述】:

我将 Firestore 与实时数据库结合使用,以便为我的应用程序提供用户存在系统。

更新:我关注的文章

https://blog.campvanilla.com/firebase-firestore-guide-how-to-user-presence-online-offline-basics-66dc27f67802

在我在这里使用此代码的一种方法中:

const usersRef = this.$fireStore.collection('users').doc(uid)
const whoIsOnlineRef = this.$fireDb.ref('.info/connected')

whoIsOnlineRef.on('value', (snapshot) => {
    this.$fireDb.ref(`/status/${uid}`)
        .onDisconnect()
        .set('offline')
        .then(() => {
          usersRef.set({ online: true }, { merge: true })

          this.$fireDb.ref(`/status/${uid}`).set('online')
        })
})

然而,.set 方法给了我标题中提到的错误,我不太明白为什么。我只是将一个 javascript 对象传递给 .set 方法,这在技术上应该可以工作。

你能发现代码有什么问题吗?

【问题讨论】:

  • 我猜您无法在 onDisconnect 处理程序中更改 Firestore。当连接断开时,该处理程序将有效地排队 RTDB 中的一些更改。 RTDB 对 Firestore 一无所知。
  • 让我给你一些更多的上下文,否则可能会造成混淆
  • 我确实读过,然后也读到了这个:blog.campvanilla.com/… 据我所知,它应该可以工作。我不明白为什么它不会
  • 您没有使用 Cloud Functions 代理从 RTDB 到 Firestore 的更改。您尝试仅在客户端上执行此操作,但这是行不通的。

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


【解决方案1】:

看起来这不起作用的原因是代码在 SSR 应用程序的服务器上运行。

我将同样的逻辑移至浏览器,它开始运行良好。我仍然不明白为什么这在服务器中不起作用,因为最终我仍然将一个简单的 js 对象传递给 .set() 方法。

不管怎样,你有它

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 2019-10-27
    • 2018-04-14
    • 2019-04-04
    • 2023-01-02
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多