我的实际验证如下:
".write": true,
".validate": "newData.child('name').isString()
&& newData.child('surname').isString()
&& newData.child('age').isNumber()",
但是,age
属性可选。用户可以填写或不填写,取决于他的决定。
我的情况是,如何对age
可选的firebase说,但如果它在那里(用户填写) - 它必须是数字
像Flow或TypeScript中的maybe type
(age?: number
)
感谢:!)
答案 0 :(得分:5)
要使年龄可选,请将其验证规则向下移动到您尝试验证的特定值:
".write": true,
".validate": "newData.child('name').isString() && newData.child('surname').isString()"
"age": {
".validate": "newData.isNumber()"
}
这样做的原因是验证规则仅在数据存在时触发,因此age
上的验证仅在age属性存在时执行,完全符合您的要求。
一般情况下,我建议将类型验证向下移动到子节点,并且只保留更高级别的“这些属性必须存在”:
".write": true,
".validate": "newData.hasChildren(['name', 'surname'])",
"name": {
".validate": "newData.isString()"
},
"surname": {
".validate": "newData.isString()"
},
"age": {
".validate": "newData.isNumber()"
}
"$other": {
".validate": false
}
上述最后一次验证确保只允许 指定的属性,因此用户无法添加其他数据(您的代码可能无法处理)。