Era*_*uwa 11 validation node.js express joi
我正在使用Joi验证器来处理我的HTTP请求.我有一个名为的参数type.我需要确保参数的可能值是"ios"或"android".
我怎样才能做到这一点?
body : {
device_key : joi.string().required(),
type : joi.string().required()
}
Run Code Online (Sandbox Code Playgroud)
Abh*_*avD 23
你可以用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);
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误 ValidationError: child "type" fails because ["type" must be one of [ios, android]]
Max*_*zov 21
也许对于想要根据现有枚举/值数组检查值的任何人来说,它都会很有用。
const SomeEnumType = { TypeA: 'A', TypeB: 'B' };
Run Code Online (Sandbox Code Playgroud)
然后只需使用这个:
const schema = Joi.object().keys({
type: Joi.string().valid(...Object.values(SomeEnumType)),
});
const myObj = { type: 'none' };
const result = Joi.validate(myObj, schema);
Run Code Online (Sandbox Code Playgroud)
对于打字稿,我认为最直接的方法是将枚举的值添加为有效值。
enum DeviceType {
iOS = 'ios',
Android = 'android',
}
Joi.string()
// .allow(null) // uncomment this line to allow 'null'
.valid(... Object.values(DeviceType))
Run Code Online (Sandbox Code Playgroud)
这本质上是jarora和Sinapcs在之前的答案中建议的,没有单独的功能。