[英]Joi - use 'valid' for specific condition
我嘗試驗證查詢參數 userId。
如果用戶是管理員,則他可以使用任何用戶 ID。
如果沒有 - 則使用特定數組中的唯一 id。
const validUserIds = isUserAdmin ? req.query.userId : userIds;
const schema = Joi.object().keys({
userId: Joi.string().optional().regex(UUIDRegex).valid(validUserIds),
});
Joi.validate(req.query, schema).then(.....);
問題:當我們發送錯誤的用戶 ID(例如“abc”等,正則表達式驗證應該失敗)並且用戶是管理員時,驗證成功通過。
我可以創建這樣的東西:如果用戶是管理員,則僅通過 rexeg 驗證,如果沒有 - 通過正則表達式 + 有效 ID 列表驗證。
Joi.when
在這里聽起來是正確的功能。
userId: Joi.string()
.regex(UUIDRegex)
.when('isUserAdmin', {
is: false,
then: yourValidateUserIdFunction() // validate
});
UUIDRegex
,我們檢查用戶 ID 是否為字符串,然后我們檢查它是否與所有用戶的UUIDRegex
匹配,最后我們檢查用戶 ID 在用戶不是管理員時是否有效。
或者,如果isUserAdmin
在 Joi 架構之外,則根據該信息創建兩個不同的架構:
const isUserAdmin = true;
if (isAdmin) {
joi.object({
userId: Joi.string().regex(UUIDRegex),
});
} else {
joi.object({
userId: Joi.string().regex(UUIDRegex).validateUserId(), // validate
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.