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

Firebase Reference.push报错:对象键出现未知'g.Bg.Cg',求解决

解决Firebase Push时出现的函数属性错误问题

我来帮你拆解这个问题哈:

首先你看到的g.Bg.Cg不是频道key的一部分,它是Firebase SDK内部对XMLHttpRequest函数的封装属性路径。报错的核心原因是:你传入db.list('channelUsers/' + channel).push(currentUser)的currentUser对象里包含了函数类型的属性(就是这个XMLHttpRequest相关的原生函数),而Firebase实时数据库是不允许存储函数类型数据的,所以才会抛出这个错误。

为什么会出现这个问题?

大概率是你传入的currentUser不是纯数据对象——比如它可能是从Firebase Auth直接获取的用户实例,这类对象自带很多SDK内部的方法和属性(比如网络请求相关的函数),不是单纯的可序列化数据,直接存到数据库就会触发这个报错。

怎么解决?

给你几个可行的方案:

  • 提取纯数据字段:只把你需要的用户信息(比如uid、用户名、邮箱等)提取出来存到数据库,不要直接传整个currentUser对象:
    // 示例:提取需要的字段
    const userData = {
      uid: currentUser.uid,
      displayName: currentUser.displayName,
      email: currentUser.email
    };
    createUserChannel(channel, userData, db);
    
  • 序列化清洗对象:用JSON序列化再反序列化的方式,自动过滤掉对象里的函数和不可序列化属性:
    const cleanUser = JSON.parse(JSON.stringify(currentUser));
    createUserChannel(channel, cleanUser, db);
    
  • 检查currentUser来源:如果是从Auth获取的用户,记得不要直接存储整个实例,而是提取其toJSON()方法返回的纯数据对象(如果有的话):
    const userData = currentUser.toJSON();
    createUserChannel(channel, userData, db);
    

另外补充下错误里的路径:channelUsers.- LDCclTrWKekW0MqUy-n.g.Bg.Cg中,- LDCclTrWKekW0MqUy-n是Firebase push自动生成的节点ID,后面的g.Bg.Cg是函数属性在对象里的嵌套路径,和你的频道key完全无关,你的频道key还是之前通过Object.keys(snapshot.val())[0]获取到的那个值。

内容的提问来源于stack exchange,提问作者Иван Сидоров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:49:59