Javascript Firebase firestore-数据必须是对象,但它是:自定义对象

Javascript Firebase firestore-数据必须是对象,但它是:自定义对象,javascript,firebase,firebase-realtime-database,google-cloud-firestore,Javascript,Firebase,Firebase Realtime Database,Google Cloud Firestore,我将Firestore与实时数据库结合使用,以便为我的应用程序提供一个用户状态系统 更新:我关注的文章 在其中一种方法中,我在这里使用以下代码: const usersRef = this.$fireStore.collection('users').doc(uid) const whoIsOnlineRef = this.$fireDb.ref('.info/connected') whoIsOnlineRef.on('value', (snapshot) => { this

我将Firestore与实时数据库结合使用,以便为我的应用程序提供一个用户状态系统

更新:我关注的文章

在其中一种方法中,我在这里使用以下代码:

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方法,从技术上讲,这应该是可行的


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

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

我把同样的逻辑移到了浏览器上,它开始工作得很好。我仍然不明白为什么这在服务器上不起作用,因为在一天结束时,我仍然在向.set()方法传递一个简单的js对象


无论哪种方式,您都可以

我猜您无法在onDisconnect处理程序中更改Firestore。当连接断开时,该处理程序将有效地将RTDB中的一些更改排队。RTDB对Firestore一无所知。您可能想阅读本指南:让我再给您一些上下文,否则可能会混淆。我确实读过,然后也谈到了这一点:据我所知,它应该可以工作。我不明白为什么你不使用云函数来代理从RTDB到Firestore的变化。您试图仅在客户端上执行此操作,这将不起作用。