1. 程式人生 > >[node] joi資料校驗模組

[node] joi資料校驗模組

前言

    在用nodejs時,需要對使用者輸入的資料進行驗證。在前端做驗證時,我們常用的做法是使用正則,正則表示式也許可以一步到位,但是他只會給你true or false,如果想要知道資料不符合哪些條件時,那麼你要進一步判斷,下面和大家分享一種可讀性和易用性更好的實現方法。

Joi簡介

    Joi是hapijs提供的資料檢驗外掛,與 hapi一樣出自沃爾瑪實驗室團隊。Joi 的 API 因其豐富的功能,使得驗證資料結構與數值的合規,變得格外容易。

1.安裝
npm i joi
2.使用
const Joi = require('joi');

const schema = Joi.object().keys({
    username: Joi.string
().alphanum().min(3).max(30).required(), password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/), access_token: [Joi.string(), Joi.number()], birthyear: Joi.number().integer().min(1900).max(2013), email: Joi.string().email({ minDomainAtoms: 2 }) }).with('username', 'birthyear').without('password'
, 'access_token'); // Return result. const result = Joi.validate({ username: 'abc', birthyear: 1994 }, schema); //result:{ error: null, // value: { username: 'abc', birthyear: 1994 }, // then: [Function: then], // catch: [Function: catch] //}

除了物件Object以外,還有一些js的基本資料型別也支援。

const Joi = require('joi');
//number型別
const schema = Joi.number(); let result = Joi.validate('213aa',schema); //或者 //let result = schema.validate('213aa'); console.log(result); //不符合型別,error有值 //result:{ error: // { ValidationError: "value" must be a number at Object.exports.process // ..... // value: NaN, // then: [Function: then], // catch: [Function: catch] // }

更多的資料型別、方法看官方文件:https://github.com/hapijs/joi/blob/v13.6.0/API.md

3.瀏覽器

Joi並不直接支援瀏覽器,但可以將joi-browser用於在瀏覽器中執行的Joi的ES5版本。