我的实际验证如下所示:
".write": true,
".validate": "newData.child('name').isString()
&& newData.child('surname').isString()
&& newData.child('age').isNumber()",
但是,
age
属性是可选的。用户是否可以填写,取决于他的决定。我的情况是,如何向Firebase说
age
是可选的,但是如果它存在(用户填写),它必须是一个数字?Flow或TypeScript(
maybe type
)中的age?: number
之类的东西谢谢!:)
最佳答案
要使年龄为可选项,请将其验证规则下移至您要验证的特定值:
".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
}
上面的最后一个验证可确保只允许使用指定的属性,因此用户无法添加其他数据(您的代码可能不具备处理能力)。