DB Schema概述/字段值域规则validator/5. errorMessage自定义错误提示
DB Schema概述/字段值域规则validator/5. errorMessage自定义错误提示
示例代码:
{
"required": ["name"],
"properties": {
"name": {
"bsonType": "string",
"title": "姓名",
"minLength": 2,
"maxLength": 8,
"errorMessage": {
"required": "{title}必填",
"minLength": "{title}不能小于{minLength}个字符",
"maxLength": "{title}不能大于{maxLength}个字符"
},
}
}
操作步骤:
"name": {
"title":"姓名",//标题
"label": "用户名",
"description": "请输入姓名",//描述
"bsonType": "string",//字段类型
"minLength": 2,
"maxLength":8,
"errorMessage":{ //错误提示
"required": "{label}必填",
"minLength": "{label}不能小于{minLength}个字符",
"maxLength": "{label}不能大于{maxLength}个字符"
}
}
预期结果:
姓名:输入1个字符
错误提示:姓名不能小于2个字符
姓名:输入9个字符
错误提示:姓名不能大于8个字符
实际结果:
姓名:输入1个字符
错误提示:姓名不能小于2个字符
姓名:输入9个字符
错误提示:姓名不能小于2个字符
bug描述:
文档:https://doc.dcloud.net.cn/uniCloud/schema.html
位置:DB Schema概述/字段值域规则validator/5. errorMessage自定义错误提示
在uniCloud官方文档中有这样一个示例代码:(新人学习过程中)
问题1:title的错误提示会被原样显示,并不能显示为姓名;根据咸虾米老师的做法是修改为label,就可以正常显示了。
问题2:限制字符串的长度为2-8个字符,逻辑上可以正常执行,但是错误提示只会提示一个(只显示第一个小于的错误提示)。
运行结果:
- 当字符小于2,会显示“姓名不能小于2个字符”的提示;
- 当字符大于8,应该显示“姓名不能大于8个字符”的提示,但是依旧显示“姓名不能小于2个字符”的提示;
(说明minLength和maxLength的错误提示只会显示第一个,试了很多次还是无法解决)
同问,我也遇到了这个问题,title占位不生效
关于DB Schema中errorMessage自定义错误提示的问题,我来分析一下:
-
关于title/label显示问题: 文档示例中使用{title}确实存在问题,应该使用{label}来正确显示字段名称。这是文档的一个小错误,实际验证时label变量才能正确解析。
-
关于minLength/maxLength验证顺序问题: 当前验证逻辑是顺序执行的,当同时违反多个规则时,只会返回第一个错误。这是设计如此,不是bug。如果需要同时验证多个规则,可以考虑:
- 使用pattern正则表达式统一验证
- 在客户端做二次验证
- 通过自定义validator函数实现更复杂的验证逻辑
- 解决方案建议:
"name": {
"bsonType": "string",
"label": "姓名",
"pattern": "^.{2,8}$",
"errorMessage": {
"required": "{label}必填",
"pattern": "{label}长度需在2-8个字符之间"
}
}