uni-app DB Schema required字段校验完全无效
uni-app DB Schema required字段校验完全无效
操作步骤:
都不用案例了,直接复制https://doc.dcloud.net.cn/uniCloud/schema.html#属性列表
这个页面的resume.schema.json案例,address在定义了required的情况下完全不生效
预期结果:
使用案例代码在不填写address的city时应该无法提交
实际结果:
完全没有任何卵用,填不填写address字段的任何值都没有任何影响
bug描述:
都不用案例了,直接复制https://doc.dcloud.net.cn/uniCloud/schema.html#属性列表
这个页面的resume.schema.json案例,address在定义了required的情况下完全不生效
1 回复
在 uni-app
中使用 DB Schema
时,如果 required
字段校验无效,可能是由于以下几个原因导致的。你可以按照以下步骤进行排查和解决:
1. 确保 DB Schema 配置正确
- 检查
DB Schema
中required
字段的配置是否正确。例如:{ "bsonType": "object", "required": ["name", "age"], "properties": { "name": { "bsonType": "string" }, "age": { "bsonType": "int" } } }
- 确保
required
字段是一个数组,且包含需要校验的字段名。
2. 确保数据库操作时启用了 Schema 校验
- 在
uniCloud
中,数据库操作(如add
、update
)需要显式启用DB Schema
校验。例如:const db = uniCloud.database(); db.collection('yourCollection').add({ name: "John", age: 25 }).then(res => { console.log(res); }).catch(err => { console.error(err); });
- 如果未启用
DB Schema
校验,required
字段的校验将不会生效。
3. 检查数据库集合的 Schema 是否已生效
- 在
uniCloud
控制台中,确保你为集合配置的DB Schema
已经发布并生效。 - 如果
Schema
未发布或未生效,校验规则将不会起作用。
4. 检查字段值是否为空
required
字段校验仅对字段值为undefined
或null
时生效。如果字段值为空字符串""
或0
,校验可能不会触发。- 如果需要校验空字符串或
0
,可以使用pattern
或自定义校验规则。
5. 调试和日志
- 在
uniCloud
控制台中查看数据库操作的日志,检查是否有校验失败的提示。 - 如果校验失败,日志中会显示具体的错误信息。
6. 更新 uni-app 和 uniCloud SDK
- 确保你使用的是最新版本的
uni-app
和uniCloud SDK
,旧版本可能存在Schema
校验的 Bug。
7. 自定义校验规则
- 如果
required
字段校验仍然无效,可以尝试使用validator
自定义校验规则。例如:{ "bsonType": "object", "required": ["name"], "properties": { "name": { "bsonType": "string", "validator": { "function": "return !!value;" } } } }