<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 功能強大 支持多語言、二開方便! 廣告
                # Joi 教程 > 原文: [http://zetcode.com/javascript/hapijoi/](http://zetcode.com/javascript/hapijoi/) Joi 教程展示了如何使用 Hapi Joi 模塊驗證 JavaScript 中的值。 ## Joi Hapi Joi 是一種對象模式描述語言,也是 JavaScript 對象的驗證器。 使用 Hapi Joi,我們可以為 JavaScript 對象(存儲信息的對象)創建藍圖或架構,以確保驗證關鍵信息。 Hapi 是一個易于使用的以配置為中心的框架,具有對輸入驗證,緩存,認證以及用于構建 Web 和服務應用的其他基本函數的內置支持。 ## Joi 安裝 首先,我們安裝庫。 ```js $ node -v v11.5.0 ``` 我們使用 Node 版本 11.5.0。 ```js $ npm init -y $ npm i @hapi/js ``` 我們啟動項目,并使用`nmp i @hapi/joi`安裝 Hapi Joi。 ## Joi 驗證 驗證通過`validate()`函數執行: ```js validate(value, schema, [options], [callback]) ``` `value`是要驗證的值,`schema`是驗證模式。 `options`是驗證選項。 在`abortEarly`選項停在第一個錯誤的驗證,否則返回發現的所有錯誤。 默認為`true`。 `convert`選項嘗試將值轉換為所需的類型。 它也默認為`true`。 `callback`是使用簽名`function(err, value)`的可選同步回調方法。 如果驗證失敗,則`err`包含錯誤原因,否則為`null`。 `value`是應用了任何類型轉換和其他修飾符的值。 ## Joi 版本 在第一個示例中,我們打印 Hapi Joi 的版本。 `version.js` ```js const Joi = require('@hapi/joi'); console.log(Joi.version) ``` Joi 的版本存儲在`Joi.version`中。 ```js const Joi = require('@hapi/joi'); ``` 我們包括 Hapi Joi 模塊。 ```js $ node version.js 15.0.3 ``` 這是一個示例輸出。 ## Joi 同步函數 在下面的示例中,我們在同步函數內部執行驗證。 `sync_fun.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.object().keys({ username: Joi.string().required(), email: Joi.string().email().required() }); let username = 'Roger Brown'; let email = 'roger@example'; let data = { username, email }; Joi.validate(data, schema, (err, value) => { if (err) { console.log(err.details); } else { console.log(value); } }); ``` 我們有兩個值可以驗證:用戶名和電子郵件。 ```js const schema = Joi.object().keys({ username: Joi.string().required(), email: Joi.string().email().required() }); ``` 這是驗證模式。 用戶名必須是字符串,并且是必需的。 該電子郵件必須是有效的電子郵件地址,并且也是必需的。 ```js let username = 'Roger Brown'; let email = 'roger@example'; let data = { username, email }; ``` 這是要驗證的數據。 ```js Joi.validate(data, schema, (err, value) => { if (err) { console.log(err.details); } else { console.log(value); } }); ``` `Joi.validate()`使用提供的模式驗證數據。 ```js $ node sync_fun.js [ { message: '"email" must be a valid email', path: [ 'email' ], type: 'string.email', context: { value: 'roger@example', key: 'email', label: 'email' } } ] ``` 這是示例輸出。 ## Joi 返回值 在下一個示例中,我們不使用同步函數。 我們使用返回的值。 `ret_vals.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.object().keys({ username: Joi.string().required(), born: Joi.date().required() }); let username = 'Roger Brown'; let born = '1988-12-11'; let data = { username, born }; const { err, value } = Joi.validate(data, schema); if (err) { console.log(err.details); } else { console.log(value); } ``` 該示例驗證兩個值:用戶名和生日。 ```js const { err, value } = Joi.validate(data, schema); ``` 使用`validate()`的另一種方法是獲取其返回值。 ```js if (err) { console.log(err.details); } else { console.log(value); } ``` 根據返回的值,我們將打印錯誤詳細信息或原始值。 ```js $ node ret_vals.js { username: 'Roger Brown', born: 1988-12-11T00:00:00.000Z } ``` 我們沒有錯誤,因此會打印驗證值。 ## Joi `abortEarly` 默認情況下,Joi 會在第一個錯誤時停止驗證。 如果要獲取所有錯誤,則必須將`abortEarly`選項設置為`true`。 `abort_early.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.object().keys({ username: Joi.string().min(2).max(30).required(), password: Joi.string().regex(/^[\w]{8,30}$/), registered: Joi.number().integer().min(2012).max(2019), married: Joi.boolean().required() }); let username = 'Roger Brown'; let password = 's#cret12'; let registered = '2011'; let married = false; let data = { username, password, registered, married }; let options = { abortEarly: false }; const { error, value } = Joi.validate(data, schema, options); if (error) { console.log(error.details); } else { console.log(value); } ``` 在示例中,我們將打印所有已發生的錯誤。 ```js const schema = Joi.object().keys({ username: Joi.string().min(2).max(30).required(), password: Joi.string().regex(/^[\w]{8,30}$/), registered: Joi.number().integer().min(2012).max(2019), married: Joi.boolean().required() }); ``` 我們有四個值可以驗證。 ```js let options = { abortEarly: false }; const { error, value } = Joi.validate(data, schema, options); ``` 我們將`abortEarly`選項設置為`false`。 ```js $ node abort_early.js [ { message: '"password" with value "s#cret12" fails to match the required pattern: /^[\\w]{8,30}$/', path: [ 'password' ], type: 'string.regex.base', context: { name: undefined, pattern: /^[\w]{8,30}$/, value: 's#cret12', key: 'password', label: 'password' } }, { message: '"registered" must be larger than or equal to 2012', path: [ 'registered' ], type: 'number.min', context: { limit: 2012, value: 2011, key: 'registered', label: 'registered' } } ] ``` 我們有兩個驗證錯誤。 ## Joi `convert` Joi 默認情況下強制轉換值; 要禁用投射,我們將`convert`選項設置為`false`。 `casting.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.object().keys({ timestamp: Joi.date().timestamp(), val: Joi.number() }); let val = '23543'; let timestamp = 1559761841; let data = { val, timestamp }; const { error, value } = Joi.validate(data, schema); if (error) { console.log(error.details); } else { console.log(value); } ``` 在示例中,我們有兩個 Joi 自動轉換的值。 ```js let val = '23543'; let timestamp = 1559761841; ``` 該字符串將強制轉換為數字,而時間戳則轉換為 ISO 字符串。 ```js $ node casting.js { val: 23543, timestamp: 1970-01-19T01:16:01.841Z } ``` 這是輸出。 ## Joi 驗證數字 使用`Joi.number()`,我們可以驗證數字。 `numbers.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.object().keys({ age: Joi.number().min(18).max(129), price: Joi.number().positive(), experience: Joi.number().greater(5) }); let age = 35; let price = -124.3; let experience = 6; let data = { age, price, experience }; const { error, value } = Joi.validate(data, schema); if (error) { console.log(error.details); } else { console.log(value); } ``` 在示例中,我們驗證了三個數字。 ```js const schema = Joi.object().keys({ age: Joi.number().min(18).max(129), price: Joi.number().positive(), experience: Joi.number().greater(5) }); ``` `age`值必須是 18-129 之間的數字。 `price`必須為正,`experience`必須大于五。 ```js $ node numbers.js [ { message: '"price" must be a positive number', path: [ 'price' ], type: 'number.positive', context: { value: -124.3, key: 'price', label: 'price' } } ] ``` 由于價格為負,因此我們得到此錯誤詳細信息。 ## Joi 驗證日期 使用`Joi.date()`,我們可以驗證日期。 `dates.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.object().keys({ timestamp: Joi.date().timestamp(), isodate: Joi.date().iso(), registered: Joi.date().greater('2018-01-01') }); let timestamp = 1559761841; let isodate = '1970-01-19T01:16:01.841Z'; let registered = '2019-02-12'; let data = { timestamp, isodate, registered }; const { error, value } = Joi.validate(data, schema); if (error) { console.log(error.details); } else { console.log(value); } ``` 該示例驗證三個日期值。 ```js const schema = Joi.object().keys({ timestamp: Joi.date().timestamp(), isodate: Joi.date().iso(), registered: Joi.date().greater('2018-01-01') }); ``` 在模式中,我們具有規則來驗證值是時間戳,具有 ISO 格式并且大于指定值。 ```js $ node dates.js { timestamp: 1970-01-19T01:16:01.841Z, isodate: 1970-01-19T01:16:01.841Z, registered: 2019-02-12T00:00:00.000Z } ``` 所有值均已通過驗證。 請注意,這些值已自動轉換為 ISO 格式。 ## Joi 驗證數組 可以使用`array()`驗證數組。 `arrays.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.array().min(2).max(10); let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ]; const { error, value } = Joi.validate(data, schema); if (error) { console.log(error.details); } else { console.log(value); } ``` 在示例中,我們驗證了整數數組。 ```js const schema = Joi.array().min(2).max(10); ``` 我們驗證數組至少有兩個元素,最多有十個元素。 ```js $ node arrays.js [ { message: '"value" must contain less than or equal to 10 items', path: [], type: 'array.max', context: { limit: 10, value: [Array], key: undefined, label: 'value' } } ] ``` 這是輸出。 ## Joi 驗證函數 可以使用`func()`驗證函數。 `functions.js` ```js const Joi = require('@hapi/joi'); const schema = Joi.func().arity(2); function add2int(x, y) { return x + y; } const { error, value } = Joi.validate(add2int, schema); if (error) { console.log(error.details); } else { console.log(value); } ``` 在示例中,我們驗證了一個函數。 ```js const schema = Joi.func().arity(2); ``` 我們驗證函數的參數(參數數量)。 在本教程中,我們已經使用 Hapi Joi 模塊在 JavaScript 中進行了驗證。 列出所有 [JavaScript 教程](/all/#js)。
                  <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>

                              哎呀哎呀视频在线观看