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,提问作者Иван Сидоров
相关产品推荐
相关产品推荐

