Joi - 对特定条件使用 'valid'
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
});
读完这里,我们检查用户 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
});
}
我尝试验证查询参数 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
});
读完这里,我们检查用户 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
});
}