Node.js参数校验模块minijoi使用详解

 更新时间:2023年09月06日 11:07:54   作者:神话  
这篇文章主要为大家介绍了Node.js参数校验模块minijoi使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Node.js参数校验模块

初衷:

由于在使用 Joi 的时候,校验时每次都要写模式规则 string.trim().required() 等等。由于参数校验是频繁且必须的,写的越来越多,代码既不好看,也不好维护,模式规则也不好记忆,并且 joi throw 的错误还需要单独去处理。所以对日常最常用的校验,封装了joi的API,并且可以在调用的时候同时传入自定义的Error,使用 joi 友好的报错堆栈提示信息 同时 throw 我们自定义的Error, 无须再单独处理 joi 的 Error

所以就有了 miniJoi ,就是简单版的joi

欢迎提 Issue 和 PR , 代码的测试用例在tests目录下,写好测试用例,执行命令为:

pnpm run coverage(推荐)
npm run coverage
yarn run coverage

控制台会输出用例情况和代码覆盖率。开发者也可以对 miniJoi 进行二次开发,打造更符合自己应用模块。

minijoi

const miniJoi = require('minijoi');
miniJoi.requireAndNotEmptyForStr(value , options)
options : {
    error : new Error("This is an Error")  //公有
    pattern : /^1[3456789]\d{9}$/    // email ID   URL  phone  name
    mode : 'strict'     //phone
    version : 'ipv6'    //IP
    generation : 'first'  //ID
}

友好的堆栈提示,在Joi的基础上,报错的同时把要校验的参数类型也一起告诉给开发者,开发者可以清楚的看到输入的值和类型, _original 字段的值就是输入的值,如下:

Error [ValidationError]: "value" is not allowed to be empty, But the type of the argument passed in is [String], Please check the value in the "_original" field.
    at Object.exports.process (D:\data\git\minijoi\node_modules\.pnpm\joi@17.4.2\node_modules\joi\lib\errors.js:184:16)
    at Object.internals.entry (D:\data\git\minijoi\node_modules\.pnpm\joi@17.4.2\node_modules\joi\lib\validator.js:150:26)
    at Object.exports.entry (D:\data\git\minijoi\node_modules\.pnpm\joi@17.4.2\node_modules\joi\lib\validator.js:27:30)
    at internals.Base.validate (D:\data\git\minijoi\node_modules\.pnpm\joi@17.4.2\node_modules\joi\lib\base.js:548:26)
    at validate (D:\data\git\minijoi\apply.js:12:37)
    at Object.requireAndNotEmptyForStr (D:\data\git\minijoi\apply.js:39:12)
    at Object.<anonymous> (D:\data\git\minijoi\test.js:101:7)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32) {
  _original: '',
  details: [
    {
      message: '"value" is not allowed to be empty, But the type of the argument passed in is [String], Please check the value in the "_original" field.',
      path: [],
      type: 'string.empty',
      context: { label: 'value', value: '' }
    }
  ]
}

Node.js版本要求

支持 Node.js V10,V12, V14, V16

API如下

开发者可自定义 Error ,调用API时传 error 参数就可以了,miniJoi 会自动抛出开发者自定义 Error,默认输出上面的错误信息。

字符串必填且非空

miniJoi.requireAndNotEmptyForStr(value)
miniJoi.requireAndNotEmptyForStr(value , {error : new Error("This is an Error")})

字符串必填可以为空

miniJoi.requireAndIsEmptyForStr(value)
miniJoi.requireAndIsEmptyForStr(value , {error : new Error("This is an Error")})

必填字符串枚举

miniJoi.requireAndEnumForStr(value , ["test"])
miniJoi.requireAndEnumForStr(value , ["test","test1"] , {error : new Error("This is an Error")})

必填字符串特定长度

miniJoi.length(value , limit)
miniJoi.length(value , limit , {error : new Error("This is an Error")})

必填字符串最大长度

miniJoi.max(value , limit)
miniJoi.max(value , limit , {error : new Error("This is an Error")})

必填字符串最小长度

miniJoi.min(value , limit)
miniJoi.min(value , limit , {error : new Error("This is an Error")})

必填字符串中文姓名

miniJoi.name(value )
miniJoi.name(value , {error : new Error("This is an Error")})
miniJoi.name(value , {pattern : xxxx})
//如miniJoi提供的中文姓名校验功能不符合开发者的要求,开发者可自定义传入正则表达式

必填字符串且合法邮箱

miniJoi.requireEmail(value )
miniJoi.requireEmail(value , {error : new Error("This is an Error")})
//输入pattern字段,则使用pattern
miniJoi.requireEmail(value , {
        error : new Error("This is an Error"),
        pattern : /^1[3456789]\d{9}$/
    })
//如miniJoi提供的邮箱校验功能不符合开发者的要求,开发者可自定义传入正则表达式

必填字符串且合法电话号码 mode字段参考 anyrule

miniJoi.requirePhone(value )
miniJoi.requirePhone(value , {error : new Error("This is an Error")})
//输入pattern字段,则使用pattern
mode 'strict'||'loose'
strict 表示严谨
loose 表示宽松
//默认为(最宽松), 只要是1开头即可
miniJoi.requirePhone(value , {
        error : new Error("This is an Error"),
        pattern : /^1[3456789]\d{9}$/
        mode : 'strict'
    })
//如miniJoi提供的电话号码校验功能不符合开发者的要求,开发者可自定义传入正则表达式

必填字符串且合法IP

miniJoi.requireIP(value )
miniJoi.requireIP(value , {error : new Error("This is an Error")})
//输入pattern字段,则使用pattern
version 'ipv4'||'ipv6'
ipv4 表示只校验ipv4
ipv6 表示只校验ipv6
//默认同时校验ipv4和ipv6
miniJoi.requireIP(value , {
        error : new Error("This is an Error"),
        version : 'ipv6'
    })
//如miniJoi提供的IP校验功能不符合开发者的要求,开发者可自定义传入正则表达式

必填字符串且合法Url

miniJoi.requireUrl(value )
miniJoi.requireUrl(value , {error : new Error("This is an Error")})
//输入pattern字段,则使用pattern
miniJoi.requireUrl(value , {
        error : new Error("This is an Error"),
        pattern : /^1[3456789]\d{9}$/
    })
//如miniJoi提供的Url校验功能不符合开发者的要求,开发者可自定义传入正则表达式

必填字符串且合法身份证

miniJoi.requireID(value )
miniJoi.requireID(value , {error : new Error("This is an Error")})
//输入pattern字段,则使用pattern
generation : "first" || "second"
first 表示只校验一代身份证
second 表示只校验二代身份证
//默认同时校验一代和二代
miniJoi.requireID(value , {
        error : new Error("This is an Error"),
        pattern : /^1[3456789]\d{9}$/
        generation : "first"
    })
//如miniJoi提供的身份证校验功能不符合开发者的要求,开发者可自定义传入正则表达式

必填数字

miniJoi.requireForNum(value)
miniJoi.requireForNum(value , {error : new Error("This is an Error")})

必填整数

miniJoi.requireForInt(value)
miniJoi.requireForInt(value , {error : new Error("This is an Error")})

必填数字枚举

miniJoi.requireAndEnumForNum(value)
miniJoi.requireAndEnumForNum(value ,[1,2], {error : new Error("This is an Error")})

必填数字小数位不大于 limit 位

miniJoi.requireAndPrecision(value)
miniJoi.requireAndPrecision(value , limit , {error : new Error("This is an Error")})

2.2 PASS
2.22 PASS
2.222 FAIL

必填数字范围API

miniJoi.requireForRangeNum(value ,op, limit )
miniJoi.requireForRangeNum(value ,op, limit , {error : new Error("This is an Error")})
op的值为 gt(>) || gte(>=) || lt(<) || lte(<=)
比如需要参数 > 0 , 则
miniJoi.requireForRangeNum(value ,"gt" , 0 )   可代表正数
参数 >= 0
miniJoi.requireForRangeNum(value ,"gte" , 0 )
参数 <= 0
miniJoi.requireForRangeNum(value ,"lte" , 0 )
参数 < 0
miniJoi.requireForRangeNum(value ,"lt" , 0 )  可代表负数
必填数字范围API
miniJoi.requireForRangeNum(value ,op, rangeArr )
miniJoi.requireForRangeNum(value ,op, rangeArr , {error : new Error("This is an Error")})
op的值为 
left-close-right-close `[0,100]`   简称l-c-r-c
left-close-right-open `[0,100)`   简称 l-c-r-o
left-open-right-open `(0,100)`     简称 l-o-r-o
left-open-right-close `(0,100]`     简称 l-o-r-c
比如需要参数 > 0 and <= 100 , 则
miniJoi.requireForRangeNum(value ,"left-open-right-close" , [0,100] )
miniJoi.requireForRangeNum(value ,"l-o-r-c" , [0,100] )
比如需要参数 >= 0 and <= 100 , 则
miniJoi.requireForRangeNum(value ,"left-close-right-close" , [0,100] )
miniJoi.requireForRangeNum(value ,"l-c-r-c" , [0,100] )
比如需要参数 > 0 and < 100 , 则
miniJoi.requireForRangeNum(value ,"left-open-right-open" , [0,100] )
miniJoi.requireForRangeNum(value ,"l-o-r-o" , [0,100] )
比如需要参数 >= 0 and < 100 , 则
miniJoi.requireForRangeNum(value ,"left-close-right-open" , [0,100] )
miniJoi.requireForRangeNum(value ,"l-c-r-o" , [0,100] )

必填整数范围API

miniJoi.requireForRangeInt(value ,op, limit )
miniJoi.requireForRangeInt(value ,op, limit , {error : new Error("This is an Error")})
op的值为 gt(>) || gte(>=) || lt(<) || lte(<=)
比如需要参数 > 0 , 则
miniJoi.requireForRangeInt(value ,"gt" , 0 )   可代表正整数
参数 >= 0
miniJoi.requireForRangeInt(value ,"gte" , 0 )
参数 <= 0
miniJoi.requireForRangeInt(value ,"lte" , 0 )
参数 < 0
miniJoi.requireForRangeInt(value ,"lt" , 0 )  可代表负整数
必填整数范围API  
miniJoi.requireForRangeInt(value ,op, rangeArr )
miniJoi.requireForRangeInt(value ,op, rangeArr , {error : new Error("This is an Error")})

必填布尔

miniJoi.requireForBool(value)
miniJoi.requireForBool(value , {error : new Error("This is an Error")})

数组必填且非空

miniJoi.requireAndNotEmptyForArr(value)
miniJoi.requireAndNotEmptyForArr(value , {error : new Error("This is an Error")})

数组必填可以为空

miniJoi.requireAndIsEmptyForArr(value)
miniJoi.requireAndIsEmptyForArr(value , {error : new Error("This is an Error")})

对象必填且非空

miniJoi.requireAndNotEmptyForObj(value)
miniJoi.requireAndNotEmptyForObj(value , {error : new Error("This is an Error")})

对象必填可以为空

miniJoi.requireAndIsEmptyForObj(value)
miniJoi.requireAndIsEmptyForObj(value , {error : new Error("This is an Error")})

以上就是Node.js参数校验模块minijoi使用详解的详细内容,更多关于Node.js参数校验模块minijoi的资料请关注脚本之家其它相关文章!

相关文章

  • 如何在Express4.x中愉快地使用async的方法

    如何在Express4.x中愉快地使用async的方法

    这篇文章主要介绍了如何在Express4.x中愉快地使用async的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Nodejs多站点切换Htpps协议详解及简单实例

    Nodejs多站点切换Htpps协议详解及简单实例

    这篇文章主要介绍了Nodejs多站点切换Htpps协议详解及简单实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • nodejs中Express与Koa2对比分析

    nodejs中Express与Koa2对比分析

    提到Node.js开发,不得不提目前炙手可热的2大框架express和koa。Express诞生已有时日,是一个简洁而灵活的web开发框架,使用简单而功能强大。Koa相对更为年轻,是Express框架原班人马基于ES6新特性重新开发的敏捷开发框架,现在可谓风头正劲,大有赶超Express之势。
    2018-02-02
  • Windows系统下Node.js的简单入门教程

    Windows系统下Node.js的简单入门教程

    这篇文章主要介绍了Windows系统下Node.js的简单入门教程,Node.js是用于后端编程的JavaScript框架,需要的朋友可以参考下
    2015-06-06
  • Node.js使用supervisor进行开发中调试的方法

    Node.js使用supervisor进行开发中调试的方法

    今天小编就为大家分享一篇关于Node.js使用supervisor进行开发中调试的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 解读node.js中的path路径模块

    解读node.js中的path路径模块

    这篇文章主要介绍了解读node.js中的path路径模块,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Node.js中下包速度慢问题解决方法分析

    Node.js中下包速度慢问题解决方法分析

    这篇文章主要介绍了Node.js中下包速度慢问题解决方法,分析了npm切换镜像源以及nrm工具镜像源管理相关使用技巧,需要的朋友可以参考下
    2023-04-04
  • nodejs发布静态https服务器步骤指南

    nodejs发布静态https服务器步骤指南

    这篇文章主要为大家介绍了nodejs发布静态https服务器的步骤指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • nodejs超出最大的调用栈错误问题

    nodejs超出最大的调用栈错误问题

    这篇文章主要介绍了nodejs超出最大的调用栈错误问题,需要的朋友可以参考下
    2017-12-12
  • node.js中Util模块作用教程示例详解

    node.js中Util模块作用教程示例详解

    这篇文章主要为大家介绍了node.js中Util模块的教程示例详解,带大家充分的了解node.js的util模块,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11

最新评论