• joi:定义多个自定义错误信息


    目录

    前言

    原始版

    基础错误版

    复杂版

    简单版


    前言

    在项目中,提交表单进行字段验证是必不可少的,在node项目中,自己写if else判断非常的繁琐,也不好进行维护,所以我们通常都会引入第三方包joi,来帮助我们进行表单字段的验证。

    原始版

    于是我写下了以下代码:

    const username = joi.string().alphanum().min(1).max(10).required()

    当然,验证是通过的,没有问题的,

    username是一个字符串,值只能包含 a-zA-Z0-9,最小长度1,最大长度10,必填项。

    利用postman发送请求,先看看会返回什么。

    长度大于10的时候返回:

    包含特殊字符的时候返回:

    等等,还有很多,但都是返回的英文,虽然能读懂是什么含义,但是对于用户来讲,用户看不懂,于是要求返回中文

    基础错误版

    于是我又写了以下代码:

    const username = joi.string().alphanum().min(1).max(10).required().error(new Error('用户名格式错误'))

    postman请求一哈

    然后吧,就发现任何错误的格式,返回的错误都是用户名格式错误,包括username为空,username参数不存在,username长度超出10等等 ,用户压根不知道自己犯了什么错。。。这种错误提示信息看来还是不行

    复杂版

    于是我又又写下了如下代码

    1. const username = joi.string().alphanum().min(1).max(10).required().error(
    2. errors => {
    3. console.log(errors)
    4. for (err of errors) {
    5. console.log(err.code)
    6. switch (err.code) {
    7. case 'string.alphanum':
    8. return new Error('只能包含a-zA-Z0-9')
    9. case 'string.max':
    10. return new Error('用户名长度不能超过10')
    11. case 'string.empty':
    12. case 'any.required':
    13. return new Error('用户名必填')
    14. default:
    15. return new Error('用户名格式错误')
    16. }
    17. }
    18. }
    19. )

     errors:

    1. [
    2. {
    3. code: 'string.alphanum',
    4. flags: { presence: 'required', error: [Function (anonymous)] },
    5. messages: {
    6. 'any.custom': [Object],
    7. 'any.default': [Object],
    8. 'any.failover': [Object],
    9. 'any.invalid': [Object],
    10. 'any.only': [Object],
    11. 'any.ref': [Object],
    12. 'any.required': [Object],
    13. 'any.unknown': [Object],
    14. 'string.alphanum': [Object],
    15. 'string.base': [Object],
    16. 'string.base64': [Object],
    17. 'string.creditCard': [Object],
    18. 'string.dataUri': [Object],
    19. 'string.domain': [Object],
    20. 'string.email': [Object],
    21. 'string.empty': [Object],
    22. 'string.guid': [Object],
    23. 'string.hex': [Object],
    24. 'string.hexAlign': [Object],
    25. 'string.hostname': [Object],
    26. 'string.ip': [Object],
    27. 'string.ipVersion': [Object],
    28. 'string.isoDate': [Object],
    29. 'string.isoDuration': [Object],
    30. 'string.length': [Object],
    31. 'string.lowercase': [Object],
    32. 'string.max': [Object],
    33. 'string.min': [Object],
    34. 'string.normalize': [Object],
    35. 'string.token': [Object],
    36. 'string.pattern.base': [Object],
    37. 'string.pattern.name': [Object],
    38. 'string.pattern.invert.base': [Object],
    39. 'string.pattern.invert.name': [Object],
    40. 'string.trim': [Object],
    41. 'string.uri': [Object],
    42. 'string.uriCustomScheme': [Object],
    43. 'string.uriRelativeOnly': [Object],
    44. 'string.uppercase': [Object]
    45. },
    46. path: [ 'username' ],
    47. prefs: {
    48. abortEarly: true,
    49. allowUnknown: true,
    50. artifacts: false,
    51. cache: true,
    52. context: null,
    53. convert: true,
    54. dateFormat: 'iso',
    55. errors: [Object],
    56. externals: true,
    57. messages: {},
    58. nonEnumerables: false,
    59. noDefaults: false,
    60. presence: 'optional',
    61. skipFunctions: false,
    62. stripUnknown: true,
    63. warnings: false
    64. },
    65. state: {
    66. path: [Array],
    67. ancestors: [Array],
    68. mainstay: [Object],
    69. schemas: null,
    70. debug: null
    71. },
    72. value: '%qwe',
    73. message: null,
    74. template: null,
    75. local: { label: 'username', value: '%qwe', key: 'username' }
    76. }
    77. ]

    随后再用postman进行测试的时候,感觉这提示也太人性化了吧 0.0

     

    简单版

    后来经过查阅资料得知,还可以简单点

    于是我又又又写下了如下代码:

    1. const username = joi.string().alphanum().min(1).max(10).required().messages({
    2. "string.empty": "用户名必填",
    3. "any.required": "用户名必填",
    4. "string.alphanum": '只能包含a-zA-Z0-9',
    5. "string.max": '用户名长度不能超过10',
    6. })

     经过测试,和error的模式是一样的,还挺不错!

  • 相关阅读:
    qt 虚拟键盘中的几个瑕疵
    python入门(10)面向对象 :类的特殊方法
    手撕520页PDF高级文档,成功“挤掉”7年开发架构师,牛逼
    需求响应公交及其路径优化研究综述
    rocketmq集群搭建笔记
    第十二天Tensorflow基础和简单的线性回归实现
    《C++ Core Guidelines解析》:深入理解C++的最佳实践
    week10|查阅文章
    Java之泛型
    IDEA中创建Web工程流程
  • 原文地址:https://blog.csdn.net/qq_42543244/article/details/126605768