我正在使用Joi验证器来处理我的HTTP请求。我有一个名为type
的参数。我需要确保参数的可能值是" ios"或" android"。
我该怎么做?
body : {
device_key : joi.string().required(),
type : joi.string().required()
}
答案 0 :(得分:11)
您可以使用valid
。
const schema = Joi.object().keys({
type: Joi.string().valid('ios', 'android'),
});
const myObj = { type: 'none' };
const result = Joi.validate(myObj, schema);
console.log(result);
这会产生错误ValidationError: child "type" fails because ["type" must be one of [ios, android]]
答案 1 :(得分:6)
对于任何想根据现有枚举/值数组检查值的人来说,它可能都会很有用。
const SomeEnumType = { TypeA: 'A', TypeB: 'B' };
然后只使用这个:
const schema = Joi.object().keys({
type: Joi.string().valid(...Object.values(SomeEnumType)),
});
const myObj = { type: 'none' };
const result = Joi.validate(myObj, schema);
答案 2 :(得分:1)
对于打字稿用户,
getEnumValues<T extends string | number>(e: any): T[] {
return typeof e === 'object' ? Object.keys(e).map(key => e[key]) : [];
}
Joi.string().valid(...getEnumValues(YOUR_ENUM));
答案 3 :(得分:0)
我迟到了这个答案。 但是,下面的步骤对希望通过Joi String验证使用枚举值的其他人会有所帮助:
function validateBody(bodyPayload) {
const schema = Joi.object({
device_key : Joi.string().required(),
type : Joi.string().valid('ios','android'),
});
return schema.validate(admin);
}
const bodyPayload = {device_key:"abc", type: "web"};
const result = validateBody(bodyPayload);