[英]How to do validation in Joi for alternative values?
我想使用 joi 验证器对请求正文进行验证。 我将通过这个片段解释确切的用例:-
const bodySchema=Joi.object().keys({
userRef: Joi.string().length(24),
userDetails: Joi.object()
.keys(userDetailObj)
.when('userRef', {
is: Joi.exist(),
then: {},
otherwise: Joi.object().keys({
firstName:Joi.string().required(),
lastName:Joi.string().required()
}).required(),
}),
});
在这个片段中,如果 userRef 存在,我想要一个空对象,如果 userDetails 存在,那么 userDetails 也是如此,那么我不想要 userRef 字段,但它不起作用。 请帮我解决这个问题。 提前致谢。
joi
版本17.2.1
任何一个:
{
"title": "title",
"description": "description",
"userRef": "aaaaaaaaaaaaaaaaaaaaaaaa"
}
或者:
{
"title": "title",
"description": "description",
"userDetails": {
"firstName": "first",
"lastName": "last"
}
}
测试解决方案:
const schema = Joi.alternatives().try(
Joi.object().keys({
title:Joi.string().required(),
description:Joi.string().required(),
userRef: Joi.string().length(24).required(),
}).required(),
Joi.object().keys({
title:Joi.string().required(),
description:Joi.string().required(),
userDetails: Joi.object().keys({
firstName: Joi.string().required(),
lastName: Joi.string().required()
}).required(),
}),
);
// works
const data1 = {
title: 'title',
description: 'description',
userRef: 'aaaaaaaaaaaaaaaaaaaaaaaa',
};
console.log(schema.validate(data1).error);
// fails
const data2 = {
};
console.log(schema.validate(data2).error.message);
// works
const data3 = {
title: 'title',
description: 'description',
userDetails: {
firstName: 'first',
lastName: 'last',
},
};
console.log(schema.validate(data3).error);
// fails
const data4 = {
title: 'title',
description: 'description',
userRef: 'a'.repeat(24),
userDetails: {
firstName: 'first',
lastName: 'last',
},
};
console.log(schema.validate(data4).error.message);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.