[node] joi資料校驗模組
阿新 • • 發佈:2018-11-19
前言
在用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版本。