我的Web应用程序中有一个简单的表单,它将JSON对象持久化到我的Firebase数据库中,并不是表单上的每个字段都是必需的,因此当构造要发送的对象时,它可能有几个undefined
属性。
由于Firebase在尝试持久化undefined
值时会抛出错误(更不用说,JSON对象上不应该有undefined
值),我想知道框架是否提供了任何方法来将所有未定义的值覆盖为null
甚至空字符串;我还没在网上找到解决办法。
在最坏的情况下,我可以手动将所有未定义的属性设置为null
,但我宁愿不这样做
对此有何想法或建议?
多谢!
6条答案
按热度按时间8wtpewkr1#
对于使用Firestore的用户,现在可以忽略
undefined
字段:www.example.comhttps://github.com/googleapis/nodejs-firestore/issues/1031#issuecomment-636308604示例:
yrwegjxp2#
我的解决方案是简单地将
stringify()
对象与replacer
组合在一起来替换所有未定义的值然后,我使用JSON
parse()
将其转换回对象wa7juj8i3#
从Firebase 9 JS SDK的突破性变化开始,它可以这样编写:
qvsjd97n4#
我不认为有任何特定的方法可以实现这一点,因为JSON的本质是希望传入一个值,在本例中可能是'null'或空字符串。
虽然目前这可能是不幸的,但我认为最好在客户端处理这个问题,如果没有输入数据,则手动添加'null'或空字符串。然后,您可以稍后使用类似'*snapshot.瓦尔()!== null *'的命令在Firebase中的该位置测试数据。
368yc8dk5#
**TL;DR:**值可以是
undefined||null
吗?fbRef.set(JSON.stringify(obj))
/fbRef.once(snap=>{const obj=JSON.parse(snap.val())})
,否则照常。要存储具有未定义/未知值的JSON对象,请将其字符串化并存储到Firebase,然后进行解析以恢复它。这将避免意外/不可预见的设置/更新错误。
如果对象是你的firebase路径的一部分,那么继续使用Kurai的解决方案。注意,Firebase不会存储一个值为
null
或undefined
的键,那么如果你想在以后更新它,它将失败。如果你想在更改后保留路径或维护这样的键,请将它们设置为0
(注意副作用)。zzoitvuj6#
对于寻找通用解决方案来清除空值和未定义值的人来说,这可能会有帮助。
创建一个像这样的helper函数并 Package 你想要清理的对象。