我的架构有3个字段,这些字段具有几个条件,具体取决于谁在场:
successUrl (反之亦然)
responseUrl
在架构中,如果没有 responseUrl ,则必须存在一对 successUrl 和 failUrl (反之亦然) )
我设法使前两个条件起作用,但是某些情况下忽略了应该使 successUrl 不存在时要求 responseUrl 的“ when”方法原因,因此架构在没有违反我的第三个条件的successUrl,failUrl和responseUrl时进行验证。
const schema = Joi.object().keys({
transaction: Joi.string().max(60),
partner: Joi.string().regex(/^[0-9a-fA-F]{24}$/, 'Invalid partner ID').required(),
amount: Joi.number().min(1).required(),
responseUrl: Joi.string().uri().when('successUrl', { is: !Joi.exist(), then: Joi.string().uri().required() }),
successUrl: Joi.string().uri(),
failUrl: Joi.string().uri()
}).with('successUrl', 'failUrl').with('failUrl', 'successUrl').without('responseUrl', 'successUrl').without('responseUrl', 'failUrl');
我显然使用错误,请链接到format。
答案 0 :(得分:0)
我认为我已经设法仅使用.and()
和.without()
来修复您的架构。
以下简化的架构版本适用:
const schema = Joi.object().keys({
failUrl: Joi.string(),
responseUrl: Joi.string(),
successUrl: Joi.string()
})
.or('failUrl', 'responseUrl', 'successUrl')
.and('successUrl', 'failUrl')
.without('responseUrl', [ 'successUrl', 'failUrl' ]);
.or()
强制存在至少一个URL。 .and()
严格要求里面没有两个键。 .without()
仅在对象中没有其他键时才允许键。