Node.js參數(shù)校驗(yàn)?zāi)Kminijoi使用詳解
Node.js參數(shù)校驗(yàn)?zāi)K
初衷:
由于在使用 Joi
的時(shí)候,校驗(yàn)時(shí)每次都要寫模式規(guī)則 string.trim().required()
等等。由于參數(shù)校驗(yàn)是頻繁且必須的,寫的越來越多,代碼既不好看,也不好維護(hù),模式規(guī)則也不好記憶,并且 joi throw
的錯誤還需要單獨(dú)去處理。所以對日常最常用的校驗(yàn),封裝了joi的API
,并且可以在調(diào)用的時(shí)候同時(shí)傳入自定義的Error
,使用 joi
友好的報(bào)錯堆棧提示信息
同時(shí) throw
我們自定義的Error
, 無須再單獨(dú)處理 joi 的 Error
。
所以就有了 miniJoi
,就是簡單版的joi
。
歡迎提 Issue 和 PR , 代碼的測試用例在tests
目錄下,寫好測試用例,執(zhí)行命令為:
pnpm run coverage(推薦) npm run coverage yarn run coverage
控制臺會輸出用例情況和代碼覆蓋率。開發(fā)者也可以對 miniJoi
進(jìn)行二次開發(fā),打造更符合自己應(yīng)用模塊。
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的基礎(chǔ)上,報(bào)錯的同時(shí)把要校驗(yàn)的參數(shù)類型也一起告訴給開發(fā)者,開發(fā)者可以清楚的看到輸入的值和類型, _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如下
開發(fā)者可自定義 Error ,調(diào)用API時(shí)傳 error 參數(shù)就可以了,miniJoi 會自動拋出開發(fā)者自定義 Error,默認(rèn)輸出上面的錯誤信息。
字符串必填且非空
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提供的中文姓名校驗(yàn)功能不符合開發(fā)者的要求,開發(fā)者可自定義傳入正則表達(dá)式
必填字符串且合法郵箱
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提供的郵箱校驗(yàn)功能不符合開發(fā)者的要求,開發(fā)者可自定義傳入正則表達(dá)式
必填字符串且合法電話號碼 mode字段參考 anyrule
miniJoi.requirePhone(value ) miniJoi.requirePhone(value , {error : new Error("This is an Error")}) //輸入pattern字段,則使用pattern mode 'strict'||'loose' strict 表示嚴(yán)謹(jǐn) loose 表示寬松 //默認(rèn)為(最寬松), 只要是1開頭即可 miniJoi.requirePhone(value , { error : new Error("This is an Error"), pattern : /^1[3456789]\d{9}$/ mode : 'strict' }) //如miniJoi提供的電話號碼校驗(yàn)功能不符合開發(fā)者的要求,開發(fā)者可自定義傳入正則表達(dá)式
必填字符串且合法IP
miniJoi.requireIP(value ) miniJoi.requireIP(value , {error : new Error("This is an Error")}) //輸入pattern字段,則使用pattern version 'ipv4'||'ipv6' ipv4 表示只校驗(yàn)ipv4 ipv6 表示只校驗(yàn)ipv6 //默認(rèn)同時(shí)校驗(yàn)ipv4和ipv6 miniJoi.requireIP(value , { error : new Error("This is an Error"), version : 'ipv6' }) //如miniJoi提供的IP校驗(yàn)功能不符合開發(fā)者的要求,開發(fā)者可自定義傳入正則表達(dá)式
必填字符串且合法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校驗(yàn)功能不符合開發(fā)者的要求,開發(fā)者可自定義傳入正則表達(dá)式
必填字符串且合法身份證
miniJoi.requireID(value ) miniJoi.requireID(value , {error : new Error("This is an Error")}) //輸入pattern字段,則使用pattern generation : "first" || "second" first 表示只校驗(yàn)一代身份證 second 表示只校驗(yàn)二代身份證 //默認(rèn)同時(shí)校驗(yàn)一代和二代 miniJoi.requireID(value , { error : new Error("This is an Error"), pattern : /^1[3456789]\d{9}$/ generation : "first" }) //如miniJoi提供的身份證校驗(yàn)功能不符合開發(fā)者的要求,開發(fā)者可自定義傳入正則表達(dá)式
必填數(shù)字
miniJoi.requireForNum(value) miniJoi.requireForNum(value , {error : new Error("This is an Error")})
必填整數(shù)
miniJoi.requireForInt(value) miniJoi.requireForInt(value , {error : new Error("This is an Error")})
必填數(shù)字枚舉
miniJoi.requireAndEnumForNum(value) miniJoi.requireAndEnumForNum(value ,[1,2], {error : new Error("This is an Error")})
必填數(shù)字小數(shù)位不大于 limit 位
miniJoi.requireAndPrecision(value) miniJoi.requireAndPrecision(value , limit , {error : new Error("This is an Error")}) 2.2 PASS 2.22 PASS 2.222 FAIL
必填數(shù)字范圍API
miniJoi.requireForRangeNum(value ,op, limit ) miniJoi.requireForRangeNum(value ,op, limit , {error : new Error("This is an Error")}) op的值為 gt(>) || gte(>=) || lt(<) || lte(<=) 比如需要參數(shù) > 0 , 則 miniJoi.requireForRangeNum(value ,"gt" , 0 ) 可代表正數(shù) 參數(shù) >= 0 miniJoi.requireForRangeNum(value ,"gte" , 0 ) 參數(shù) <= 0 miniJoi.requireForRangeNum(value ,"lte" , 0 ) 參數(shù) < 0 miniJoi.requireForRangeNum(value ,"lt" , 0 ) 可代表負(fù)數(shù) 必填數(shù)字范圍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 比如需要參數(shù) > 0 and <= 100 , 則 miniJoi.requireForRangeNum(value ,"left-open-right-close" , [0,100] ) miniJoi.requireForRangeNum(value ,"l-o-r-c" , [0,100] ) 比如需要參數(shù) >= 0 and <= 100 , 則 miniJoi.requireForRangeNum(value ,"left-close-right-close" , [0,100] ) miniJoi.requireForRangeNum(value ,"l-c-r-c" , [0,100] ) 比如需要參數(shù) > 0 and < 100 , 則 miniJoi.requireForRangeNum(value ,"left-open-right-open" , [0,100] ) miniJoi.requireForRangeNum(value ,"l-o-r-o" , [0,100] ) 比如需要參數(shù) >= 0 and < 100 , 則 miniJoi.requireForRangeNum(value ,"left-close-right-open" , [0,100] ) miniJoi.requireForRangeNum(value ,"l-c-r-o" , [0,100] )
必填整數(shù)范圍API
miniJoi.requireForRangeInt(value ,op, limit ) miniJoi.requireForRangeInt(value ,op, limit , {error : new Error("This is an Error")}) op的值為 gt(>) || gte(>=) || lt(<) || lte(<=) 比如需要參數(shù) > 0 , 則 miniJoi.requireForRangeInt(value ,"gt" , 0 ) 可代表正整數(shù) 參數(shù) >= 0 miniJoi.requireForRangeInt(value ,"gte" , 0 ) 參數(shù) <= 0 miniJoi.requireForRangeInt(value ,"lte" , 0 ) 參數(shù) < 0 miniJoi.requireForRangeInt(value ,"lt" , 0 ) 可代表負(fù)整數(shù) 必填整數(shù)范圍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")})
數(shù)組必填且非空
miniJoi.requireAndNotEmptyForArr(value) miniJoi.requireAndNotEmptyForArr(value , {error : new Error("This is an Error")})
數(shù)組必填可以為空
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參數(shù)校驗(yàn)?zāi)Kminijoi使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Node.js參數(shù)校驗(yàn)?zāi)Kminijoi的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js中.npmrc文件的配置實(shí)現(xiàn)
.npmrc?文件是 npm 配置的核心文件,用于管理 npm 的行為,本文就來介紹一下Node .npmrc文件配置,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12nodejs實(shí)現(xiàn)郵件發(fā)送服務(wù)實(shí)例分享
本文給大家講解的是簡單的使用nodejs搭建郵件發(fā)送服務(wù)的一個實(shí)例,非常的好用,有需要的小伙伴可以參考下2017-03-03Node.js和MongoDB實(shí)現(xiàn)簡單日志分析系統(tǒng)
這篇文章主要介紹了Node.js和MongoDB實(shí)現(xiàn)簡單日志分析系統(tǒng),本文給出了服務(wù)器端、客戶端、圖表生成、Shell自動執(zhí)行等功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04