<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ### BetterValidate 校驗規則 ## 類校驗 對于參數的校驗,Lin 提供了類校驗這種便捷,好用的方式,它會 對`ctx.request.body(上下文請求體)`、`ctx.request.query(上下文請求query參數)`、`ctx.request.header(上下文請求頭)`、`ctx.param(路由參數)`這些參數進行統一校驗 ,所以請保證你的參數名**沒有重復**。 代碼演示: ``` class RegisterValidator extends LinValidator { constructor() { super(); this.nickname = [ new Rule("isNotEmpty", "昵稱不可為空"), new Rule("isLength", "昵稱長度必須在2~10之間", 2, 10) new Rule("isInt", "分組id必須是整數,且大于0", { min: 1 }) ]; this.group_id = new Rule("isInt", "分組id必須是整數,且大于0", { min: 1 }); this.email = [ new Rule("isOptional"), new Rule("isEmail", "電子郵箱不符合規范,請輸入正確的郵箱") ]; this.password = [ new Rule( "matches", "密碼長度必須在6~22位之間,包含字符、數字和 _ ", /^[A-Za-z0-9_*&$#@]{6,22}$/ ) ]; this.confirm_password = new Rule("isNotEmpty", "確認密碼不可為空"); } validateConfirmPassword(data) { if (!data.body.password || !data.body.confirm_password) { return [false, "兩次輸入的密碼不一致,請重新輸入"]; } let ok = data.body.password === data.body.confirm_password; if (ok) { return ok; } else { return [false, "兩次輸入的密碼不一致,請重新輸入"]; } } } ``` ***** ### isOptional `isOptional`這個 Rule 校驗, 當字段存在時,則校驗,不存在則不校驗 ~~~ new Rule("isOptional", "", "pedrogao1996@gmail.com"), ~~~ 當`isOptional`Rule 被賦有默認值時,這個字段就會發生變化。以`email`為例,當前端沒 有傳入這個參數時,校驗器中的`email`數據肯定是一個`undefined`。但是因為默認值的存 在,這個`email`會被賦予默認值,即`pedrogao1996@gmail.com` ***** ### 自定義規則函數 規則函數是校驗器中另一種用于對參數校驗的方式,它比顯示的 Rule 校驗具有更加的靈活 性和可操作性。下面我們以一個小例子來深入理解規則函數: ~~~ validateConfirmPassword(data) { if (!data.body.password || !data.body.confirm_password) { return [false, "兩次輸入的密碼不一致,請重新輸入"]; } let ok = data.body.password === data.body.confirm_password; if (ok) { return ok; } else { return [false, "兩次輸入的密碼不一致,請重新輸入"]; } } ~~~ 首先任何一個規則函數,滿足以`validate`開頭的類方法,除`validate()`這個函數外。都 會被帶入一個重要的參數`data`。data 是前端傳入參數的容器,它的整體結構如下: ~~~ this.data = { body: ctx.request.body, // body -> body query: ctx.request.query, // query -> query path: ctx.params, // params -> path header: ctx.request.header // header -> header }; ~~~ 返回值的所有可選項類似如下: ~~~ validateNameAndAge() { // 表示校驗成功 return true; // 校驗失敗,并給定錯誤信息 return [false,"message"] // 校驗失敗,并給定錯誤信息,以及錯誤信息的鍵為nameAndAge // 一般情況下,我們會默認生成鍵,如這個函數生成的鍵為 NameAndAge,當然你也可以選擇自定義 return [false,"message","nameAndAge"] } ~~~ 規則函數除了通過返回值來判斷失敗之外,還可以通過拋出異常來提前結束規則函數并校驗 失敗。如下: ~~~ validateNameAndAge() { // 拋出異常,即校驗失敗 throw new ParametersException({ msg: "Lin will carry you!" }); // 返回true,表示校驗成功 return true; } ~~~ 這兩種方式都可以使規則函數校驗失敗,但是我們推薦你使用第一種方式,即**返回值方 式** ***** ### 繼承 校驗器提供繼承的方式,讓你的參數可以被組合校驗。 ~~~ class PositiveIdValidator extends LinValidator { constructor() { super(); this.id = new Rule("isInt", "id必須為正整數", { min: 1 }); } } ~~~ 我們首先定義了一個`PositiveIdValidator`的校驗器,它會被 id 這個參數進行正整數校 驗,一般情況下 id 的校驗被使用的很普遍,其他的校驗器也需要使用,但是我們又不想重 新再寫一遍。因此,我們可以繼承`PositiveIdValidator`。 ~~~ class UpdateUserInfoValidator extends PositiveIdValidator { constructor() { super(); this.group_id = new Rule("isInt", "分組id必須是正整數", { min: 1 }); this.email = new Rule("isEmail", "電子郵箱不符合規范,請輸入正確的郵箱"); } } ~~~ 這里`UpdateUserInfoValidator`繼承了`PositiveIdValidator`,因 此`UpdateUserInfoValidator`也可對 id 參數進行校驗,而且擴展了 group\_id 和 email 兩個參數的校驗。 ***** ### 別名 validator 不僅僅提供繼承,還提供另一種解放勞動力的方式——別名。如: ~~~ class PositiveIdValidator extends LinValidator { constructor() { super(); this.id = new Rule("isInt", "id必須為正整數", { min: 1 }); } } ~~~ `PositiveIdValidator`會對 id 參數進行校驗,但是有時候參數的校驗邏輯是一樣的,但 是參數的名字不相同。如 uid 這個參數,它跟 id 這個參數的 Rule 一樣。那么我們是不 是還需要重新再寫一個校驗器定義一個 uid 的 Rule 了。這可行,但不優雅。 ~~~ const v = await new PositiveIdValidator().validate(ctx, { id: "uid" }); ~~~ 我們可以通過上面的方式來給 id 一個別名,這個別名為 uid。當使用了別名之后,校驗器 不會對 id 這個參數做校驗,**但是會對 uid 這個參數做校驗**。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看