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

这篇具有很好参考价值的文章主要介绍了joi:定义多个自定义错误信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

原始版

基础错误版

复杂版

简单版


前言

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

原始版

于是我写下了以下代码:

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

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

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

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

长度大于10的时候返回:

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

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

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

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

基础错误版

于是我又写了以下代码:

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

postman请求一哈

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

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

复杂版

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

const username = joi.string().alphanum().min(1).max(10).required().error(
    errors => {
        console.log(errors)
        for (err of errors) {
            console.log(err.code)
            switch (err.code) {
                case 'string.alphanum':
                    return new Error('只能包含a-zA-Z0-9')
                case 'string.max':
                    return new Error('用户名长度不能超过10')
                case 'string.empty':
                case 'any.required':
                    return new Error('用户名必填')
                default:
                    return new Error('用户名格式错误')
            }
        }
    }
)

 errors:

[
  {
    code: 'string.alphanum',
    flags: { presence: 'required', error: [Function (anonymous)] },
    messages: {
      'any.custom': [Object],
      'any.default': [Object],
      'any.failover': [Object],
      'any.invalid': [Object],
      'any.only': [Object],
      'any.ref': [Object],
      'any.required': [Object],
      'any.unknown': [Object],
      'string.alphanum': [Object],
      'string.base': [Object],
      'string.base64': [Object],
      'string.creditCard': [Object],
      'string.dataUri': [Object],
      'string.domain': [Object],
      'string.email': [Object],
      'string.empty': [Object],
      'string.guid': [Object],
      'string.hex': [Object],
      'string.hexAlign': [Object],
      'string.hostname': [Object],
      'string.ip': [Object],
      'string.ipVersion': [Object],
      'string.isoDate': [Object],
      'string.isoDuration': [Object],
      'string.length': [Object],
      'string.lowercase': [Object],
      'string.max': [Object],
      'string.min': [Object],
      'string.normalize': [Object],
      'string.token': [Object],
      'string.pattern.base': [Object],
      'string.pattern.name': [Object],
      'string.pattern.invert.base': [Object],
      'string.pattern.invert.name': [Object],
      'string.trim': [Object],
      'string.uri': [Object],
      'string.uriCustomScheme': [Object],
      'string.uriRelativeOnly': [Object],
      'string.uppercase': [Object]
    },
    path: [ 'username' ],
    prefs: {
      abortEarly: true,
      allowUnknown: true,
      artifacts: false,
      cache: true,
      context: null,
      convert: true,
      dateFormat: 'iso',
      errors: [Object],
      externals: true,
      messages: {},
      nonEnumerables: false,
      noDefaults: false,
      presence: 'optional',
      skipFunctions: false,
      stripUnknown: true,
      warnings: false
    },
    state: {
      path: [Array],
      ancestors: [Array],
      mainstay: [Object],
      schemas: null,
      debug: null
    },
    value: '%qwe',
    message: null,
    template: null,
    local: { label: 'username', value: '%qwe', key: 'username' }
  }
]

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

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

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

简单版

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

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

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

 经过测试,和error的模式是一样的,还挺不错!文章来源地址https://www.toymoban.com/news/detail-500640.html

到了这里,关于joi:定义多个自定义错误信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elementSelect 选择器多选名称过长撑开变高,超出选择框,有多个时并会撑开原始高度优化方式

            我们用elementui 多选下拉选框长度固定的情况下,选择多个长度时会强制撑开高度,那么怎么让他不换行、不撑开,而是超过的长度显示省略呢?         首先给el-select一个class名称,随意给,我给的是selects,然后加上以下样式即可; 其中,word-break:keep-all; / 不换行 / w

    2024年02月15日
    浏览(38)
  • 【c语言】详解c语言#预处理期过程 | 宏定义前言

    c语言系列专栏: c语言之路重点知识整合   创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡𖥦)!!  主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 代码编译到执

    2024年02月01日
    浏览(52)
  • cp命令 复制多个目录/文件夹下文件到指定目录

    可以使用cp命令的通配符和递归选项来复制多个目录下多个文件夹下的文件到指定目录。 如果目标目录不存在,可以使用 mkdir -p命令来创建目录。 -p 选项表示递归创建目录,如果目录已经存在,则不会报错。 例如,以下命令会复制 /path/to/dir1和 /path/to/dir2 下的所有子目录中的

    2024年02月12日
    浏览(73)
  • 【学习笔记】「JOI Open 2022」长颈鹿

    有点难😅 不难写出 O ( n 3 ) O(n^3) O ( n 3 ) 的 D P DP D P ,考虑不一样的做法🤔 发现答案和 L I S / L D S LIS/LDS L I S / L D S 有关系。如果是左上角/右上角那么加入 L D S LDS L D S ,否则加入 L I S LIS L I S ,容易发现原序列被拆分成了一个 L I S LIS L I S 和 L D S LDS L D S ,因此答案期望不会

    2024年02月09日
    浏览(34)
  • 多个硬盘挂载到同一个目录

    同一目录无法重复挂载,后挂载的会覆盖之前挂载的磁盘。但是现在需要将4块磁盘并行挂载,该如何操作呢? 将2块磁盘合并到一个逻辑卷 进行挂载。 基本知识 基本概念PV(Physical Volume)- 物理卷物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整

    2024年02月08日
    浏览(84)
  • Python 合并多个 PDF 文件并建立书签目录

    今天在用 WPS 的 PDF 工具合并多个文件的时候,非常不给力,居然卡死了好几次,什么毛病?! 心里想,就这么点儿功能,居然收了我会员费都实现不了?不是吧…… 只能自己来了,主要用了 pypdf 库,因为 PyPDF2 版本更新原因,一些类和函数已经过时,截止发文时以下是最新

    2024年02月11日
    浏览(50)
  • emacs打开git仓库下多个子工程的根目录问题解决案

    如题所述,这个问题困扰我很久了,一直没搜到完整的解决方案。这次终于乘着空闲时间,研究了projectile.el源码找到了方案。 问题场景具体描述下: 我自己有一个私人git仓库,这个git仓库有多个不同的代码工程,因为只有我一个人维护提交,所以不想分出很多git仓库,都是统

    2024年02月15日
    浏览(35)
  • Flume监听多个文件目录,并根据文件名称不同,输出到kafka不同topic中

    https://blog.csdn.net/qinqinde123/article/details/128130131 flume监听到有新文件出现的时候,会将文件内容推送到kakfa的topic中,但是如果文件夹中有不同类型的文件,直接推送到kafka的同一个topic中,如果根据内容无法区分不同类型的文件,那就需要根据文件名称来区分。flume本身根据配置

    2023年04月08日
    浏览(66)
  • System.AggregateException: 发生一个或多个错误.....

    System.AggregateException: 发生一个或多个错误。 --- Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。检查输出窗口了解更多详细信息。 --- 内部异常堆栈跟踪的结尾 --- --- (内部异常 #0) Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。检查输出窗口了解更多详细信息。-

    2024年04月22日
    浏览(33)
  • 项目代码行数统计,总行数统计,任意语言,忽略目录/指定多个文件,分分钟搞定。

    工具大小:3.6M 下载地址: https://www.zeropo.com/SourceCounter.zip 使用方式:下载运行exe(无需安装) 其他拓展 如质量指标:单元测试用例密度,单元测试缺陷密度,综合测试用例密度,综合测试缺陷密度 人工数和成本分析设定:代码生产率,多少行/人每月、一个人月的上班日数

    2024年02月19日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包