Node實戰篇:使用joi來驗證數據模型(十)

Node實戰篇:使用joi來驗證數據模型(十)

當我們書寫路由時,往往需要對用戶輸入的數據進行驗證,來保證用戶輸入的內容符合要求。那麼是否有個庫來幫我們來做這樣的事情呢?接下來就給大家介紹一個庫---Joi

Joi文檔

我總結了常用的一些方法,給大家分享出來,大家可以自行測試,好用才值得分享

// 通用類型登錄
let paramSchema = Joi.object().keys({
// 3 - 30 個 數字、字符
username: Joi.string().alphanum().min(3).max(30).required(),
// 3 - 30 位 字母數字組合密碼
password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
// string || number 都可以通過
access_token: [Joi.string(), Joi.number()],
// 生日限制
birthyear: Joi.number().integer().min(1900).max(2018),
// email 限制
email: Joi.string().email(),
// URI限制
website: Joi.string().uri({
scheme: [
'git',
/git\+https?/
]
}),
// ==== 允許為空/ 否認不允許為空 ====
search: Joi.string().allow(''),
// 驗證枚舉值,如果不傳,默認為all
type: Joi.string().valid('disabled', 'normal', 'all').default('all'),
// 開始時間 會自動格式化

startTime: Joi.date().min('1-1-1974').max('now'),
// 結束時間 必須大於開始時間,小於2100
endTime: Joi.when(Joi.ref('startTime'), { is: Joi.date().required(), then: Joi.date().max('1-1-2100') }),
// 頁碼 限制最小值
page: Joi.number().integer().min(1).default(1),
pageSize: Joi.number().integer().default(8),
// deleteWhenLtTen: Joi.number().integer().max(10).strip(),
// 數組中包含某個字段 && 數字
arrayString: Joi.array().items(
// 數組中必須包含 name1
Joi.string().label('name1').required(),
// 數組中必須包含 數字
Joi.number().required(),
// 數組中可以包含其他類型,如bool, 但是最終結果會==除掉【以上類型的以外字段】
Joi.any().strip()
),
// 數組對象, 如需其參考以上字段
arrayObject: Joi.array().items(
Joi.object().keys({
age: Joi.number().integer().max(200),
sex: Joi.boolean()
})
)
// with 中必須同時存在某些字段,故不可以填寫一個參數
// .without() 同理,不可以一個字段,不能同時存在}).with("username", "password");
// 測試數據
const testData = {
Password: "12345678"}
// 驗證
let value = Joi.validate(testData, paramSchema, {
allowUnknown: true, abortEarly: true
});
console.log(value);
if (value.error) {
throw error;
}

關注我們

可以關注“IT實戰聯盟”並留言也可以加入交流群和作者互撩哦~~~


分享到:


相關文章: