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的错误提示只会显示第一个,试了很多次还是无法解决)

2 回复

同问,我也遇到了这个问题,title占位不生效


关于DB Schema中errorMessage自定义错误提示的问题,我来分析一下:

  1. 关于title/label显示问题: 文档示例中使用{title}确实存在问题,应该使用{label}来正确显示字段名称。这是文档的一个小错误,实际验证时label变量才能正确解析。

  2. 关于minLength/maxLength验证顺序问题: 当前验证逻辑是顺序执行的,当同时违反多个规则时,只会返回第一个错误。这是设计如此,不是bug。如果需要同时验证多个规则,可以考虑:

  • 使用pattern正则表达式统一验证
  • 在客户端做二次验证
  • 通过自定义validator函数实现更复杂的验证逻辑
  1. 解决方案建议:
"name": {
  "bsonType": "string",
  "label": "姓名",
  "pattern": "^.{2,8}$",
  "errorMessage": {
    "required": "{label}必填",
    "pattern": "{label}长度需在2-8个字符之间"
  }
}
回到顶部