嵌套的 Joi 验证在使用时不起作用
Nested Joi validations not working using when
我一直在尝试嵌套 where 验证,但到目前为止运气不好。这是我想要实现的目标:
1- 如果 mainType 是 COMMERCIAL,则为 contactMethod 定义所需的架构。
2- 如果 isHousing 为真,则为 contactMethod 定义所需的架构。
3- 如果 mainType 是 REAL_ESTATE 则不允许传递 contactMethod 对象
以下是我失败的尝试:
contactMethod: Joi.when('mainType', {
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required()),
}).when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required(),
otherwise: Joi.disallow(),
})
我也试过这个:
contactMethod: Joi.when('mainType', {
switch: [
{
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required(),
},
{
is: 'REAL_ESTATE',
then: Joi.when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required(),
}),
otherwise: Joi.disallow(),
},
],
})
那么我做错了什么?
和第一关一样 - 使用.keys({})
定义对象属性。
contactMethod: Joi.when('mainType', {
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object() // You missing usage of Joi.object()
.keys({ // should define object attribute here
message: Joi.string().allow(''),
})
.required(),
})
.required(),
}).when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object() // the same :|
.keys({
message: Joi.string().allow(''),
})
.required(),
})
.required(),
otherwise: Joi.disallow(),
});
好的,我是这样解决的:
contactMethod: Joi.when('mainType', {
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object()
.keys({
message: Joi.string().allow(''),
})
.required(),
})
.required(),
otherwise: Joi.when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object()
.keys({
message: Joi.string().allow(''),
})
.required(),
})
.required(),
otherwise: Joi.forbidden(),
}),
})
我的尝试没有包含上面@hoangdv 建议的键 ({}) + 我还需要将 disallow() 更改为禁止。
希望这对以后的人有所帮助。
我一直在尝试嵌套 where 验证,但到目前为止运气不好。这是我想要实现的目标:
1- 如果 mainType 是 COMMERCIAL,则为 contactMethod 定义所需的架构。 2- 如果 isHousing 为真,则为 contactMethod 定义所需的架构。 3- 如果 mainType 是 REAL_ESTATE 则不允许传递 contactMethod 对象
以下是我失败的尝试:
contactMethod: Joi.when('mainType', {
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required()),
}).when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required(),
otherwise: Joi.disallow(),
})
我也试过这个:
contactMethod: Joi.when('mainType', {
switch: [
{
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required(),
},
{
is: 'REAL_ESTATE',
then: Joi.when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object({
message: Joi.string().allow(''),
}).required(),
})
.required(),
}),
otherwise: Joi.disallow(),
},
],
})
那么我做错了什么?
和第一关一样 - 使用.keys({})
定义对象属性。
contactMethod: Joi.when('mainType', {
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object() // You missing usage of Joi.object()
.keys({ // should define object attribute here
message: Joi.string().allow(''),
})
.required(),
})
.required(),
}).when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object() // the same :|
.keys({
message: Joi.string().allow(''),
})
.required(),
})
.required(),
otherwise: Joi.disallow(),
});
好的,我是这样解决的:
contactMethod: Joi.when('mainType', {
is: 'COMMERCIAL',
then: Joi.object()
.keys({
create: Joi.object()
.keys({
message: Joi.string().allow(''),
})
.required(),
})
.required(),
otherwise: Joi.when('isHousing', {
is: true,
then: Joi.object()
.keys({
create: Joi.object()
.keys({
message: Joi.string().allow(''),
})
.required(),
})
.required(),
otherwise: Joi.forbidden(),
}),
})
我的尝试没有包含上面@hoangdv 建议的键 ({}) + 我还需要将 disallow() 更改为禁止。
希望这对以后的人有所帮助。