最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js參數(shù)校驗(yàn)?zāi)Kminijoi使用詳解

 更新時(shí)間:2023年09月06日 11:07:54   作者:神話  
這篇文章主要為大家介紹了Node.js參數(shù)校驗(yàn)?zāi)Kminijoi使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Node.js參數(shù)校驗(yàn)?zāi)K

初衷:

由于在使用 Joi 的時(shí)候,校驗(yàn)時(shí)每次都要寫模式規(guī)則 string.trim().required() 等等。由于參數(shù)校驗(yàn)是頻繁且必須的,寫的越來越多,代碼既不好看,也不好維護(hù),模式規(guī)則也不好記憶,并且 joi throw 的錯(cuò)誤還需要單獨(dú)去處理。所以對(duì)日常最常用的校驗(yàn),封裝了joi的API,并且可以在調(diào)用的時(shí)候同時(shí)傳入自定義的Error,使用 joi 友好的報(bào)錯(cuò)堆棧提示信息 同時(shí) throw 我們自定義的Error, 無須再單獨(dú)處理 joi 的 Error。

所以就有了 miniJoi ,就是簡(jiǎn)單版的joi。

歡迎提 Issue 和 PR , 代碼的測(cè)試用例在tests目錄下,寫好測(cè)試用例,執(zhí)行命令為:

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

控制臺(tái)會(huì)輸出用例情況和代碼覆蓋率。開發(fā)者也可以對(duì) 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)錯(cuò)的同時(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 會(huì)自動(dòng)拋出開發(fā)者自定義 Error,默認(rèn)輸出上面的錯(cuò)誤信息。

字符串必填且非空

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")})

必填字符串特定長(zhǎng)度

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

必填字符串最大長(zhǎng)度

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

必填字符串最小長(zhǎng)度

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á)式

必填字符串且合法電話號(hào)碼 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提供的電話號(hào)碼校驗(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]`   簡(jiǎn)稱l-c-r-c
left-close-right-open `[0,100)`   簡(jiǎn)稱 l-c-r-o
left-open-right-open `(0,100)`     簡(jiǎn)稱 l-o-r-o
left-open-right-close `(0,100]`     簡(jiǎn)稱 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")})

對(duì)象必填且非空

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

對(duì)象必填可以為空

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的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Node.js 多進(jìn)程處理CPU密集任務(wù)的實(shí)現(xiàn)

    Node.js 多進(jìn)程處理CPU密集任務(wù)的實(shí)現(xiàn)

    這篇文章主要介紹了Node.js 多進(jìn)程處理CPU密集任務(wù)的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • 學(xué)習(xí)node.js 斷言的使用詳解

    學(xué)習(xí)node.js 斷言的使用詳解

    這篇文章主要介紹了學(xué)習(xí)node.js 斷言的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • pnpm的安裝和使用指南(推薦!)

    pnpm的安裝和使用指南(推薦!)

    如果你覺得npm比較慢,又不想用yarn,那么pnpm是一個(gè)很好的選擇,下面這篇文章主要給大家介紹了關(guān)于pnpm的安裝和使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 詳解KOA2如何手寫中間件(裝飾器模式)

    詳解KOA2如何手寫中間件(裝飾器模式)

    這篇文章主要介紹了詳解KOA2如何手寫中間件(裝飾器模式),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Node.js 中的流Stream模塊簡(jiǎn)介及如何使用流進(jìn)行數(shù)據(jù)處理

    Node.js 中的流Stream模塊簡(jiǎn)介及如何使用流進(jìn)行數(shù)據(jù)處理

    Node.js中的流(Stream)模塊用于高效處理流式數(shù)據(jù),包括可讀流、可寫流、雙邊流和轉(zhuǎn)換流等,通過`fs.createReadStream`和`.pipe`方法可以方便地讀取文件并寫入控制臺(tái)或處理網(wǎng)絡(luò)請(qǐng)求,在實(shí)際開發(fā)中,需要注意錯(cuò)誤處理、資源管理和性能優(yōu)化等問題
    2025-03-03
  • nvm管理node版本的詳細(xì)圖文教程

    nvm管理node版本的詳細(xì)圖文教程

    nvm全英文也叫node.js version management,是一個(gè)nodejs的版本管理工具,下面這篇文章主要給大家介紹了關(guān)于nvm管理node版本的詳細(xì)圖文教程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 詳解Node.js:events事件模塊

    詳解Node.js:events事件模塊

    由于nodejs是單線程運(yùn)行的,所以nodejs需要借助事件輪詢,本篇文章主要介紹了Node.js:events事件模塊,有興趣的可以了解一下。
    2016-11-11
  • nodejs處理圖片的中間件node-images詳解

    nodejs處理圖片的中間件node-images詳解

    這篇文章主要介紹了nodejs處理圖片的中間件node-images詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • nestjs搭建HTTP與WebSocket服務(wù)詳細(xì)過程

    nestjs搭建HTTP與WebSocket服務(wù)詳細(xì)過程

    這篇文章主要介紹了nestjs搭建HTTP與WebSocket服務(wù)詳細(xì)過程的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • NodeJs 包管理工具的使用

    NodeJs 包管理工具的使用

    本文主要介紹了NodeJs 包管理工具,主要包括npm,cnpm及yarn,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評(píng)論

玉屏| 玉田县| 湖南省| 竹北市| 吉林市| 辽源市| 邵阳市| 昆山市| 治县。| 罗山县| 渭南市| 东方市| 同仁县| 肇源县| 理塘县| 教育| 罗平县| 鄂尔多斯市| 莱州市| 贵州省| 江安县| 德安县| 房产| 大安市| 扶余县| 富民县| 清河县| 清徐县| 遂昌县| 习水县| 秦皇岛市| 乌兰县| 北流市| 中方县| 隆德县| 达日县| 西青区| 罗定市| 宾阳县| 旅游| 海南省|