You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase在线状态构建报错:userStatusFirestoreRef.set不是函数

解决Firebase实时数据库引用调用.set()时报错set is not a function

错误的核心原因是混淆了Firebase实时数据库(Realtime Database)和Firestore的API使用方式,并且在模块化API中,实时数据库的写入操作不是通过引用对象的.set()方法调用,而是需要使用独立的set函数。

具体修复步骤:

  1. 在firebase.ts中导入并导出实时数据库的set函数
    从firebase/database中导入set,并添加到导出列表里:

    // 在firebase.ts的import部分添加
    import {
      onDisconnect,
      ref as dbRef,
      getDatabase,
      onValue,
      set // 新增导入set函数
    } from "firebase/database";
    
    // 在export部分添加set
    export {
      // ... 其他导出内容
      onDisconnect,
      dbRef,
      firebaseDb,
      onValue,
      set // 新增导出
    };
    
  2. 修改业务逻辑代码,使用set函数替代引用的.set()方法
    同时建议修改变量名(避免和Firestore混淆),把userStatusFirestoreRef改成userStatusRTDBRef(RTDB代表Realtime Database),然后用set函数执行写入:

    import {
      auth,
      serverTimestamp,
      onDisconnect,
      dbRef,
      firebaseDb,
      onValue,
      set // 导入新增的set函数
    } from "../firebase";
    
    if (uid) {
      // 修改变量名,明确是实时数据库的引用
      const userStatusRTDBRef = dbRef(firebaseDb, `status/${uid}`);
      const isOfflineForDatabase = {
        state: "offline",
        last_changed: serverTimestamp(),
      };
    
      const isOnlineForDatabase = {
        state: "online",
        last_changed: serverTimestamp(),
      };
    
      const connectedRef = dbRef(firebaseDb, ".info/connected");
      onValue(connectedRef, (snapshot) => {
        if (snapshot.val() == false) {
          // 用set函数替代引用的.set()方法
          set(userStatusRTDBRef, isOfflineForDatabase);
          return;
        }
    
        onDisconnect(userStatusRTDBRef)
          .set(isOfflineForDatabase)
          .then(() => {
            // 同样用set函数
            set(userStatusRTDBRef, isOnlineForDatabase);
          });
      });
    }
    

额外说明:

官方的在线状态方案是同时使用实时数据库和Firestore:实时数据库用来监听连接状态和处理离线触发(因为它支持onDisconnect),最终需要把状态同步到Firestore中供业务查询。如果你还需要同步到Firestore,需要在写入实时数据库的同时,调用Firestore的setDoc函数写入对应的文档。

内容的提问来源于stack exchange,提问作者Pusoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:42:04