Joi - not.exist()?

Dan*_*off 5 javascript validation typescript joi

我正在尝试与 Joi 进行验证,但遇到了无法实现的场景。我有一个对象。在某些情况下,对象会有一个 id(编辑),而在其他情况下它不会(创建)。

我想验证在“id”不存在的情况下,应该有几个其他字段。

到目前为止,我唯一有效的解决方案是当 id 为空并且根本没有丢失时。有没有办法匹配不存在的密钥,或者我应该将其更改为 null (有点 hacky)。

joi.object().keys({
  id: joi
    .number()
    .min(0)
    .allow(null),
  someOtherField1: joi.when("id", { is: null, then: joi.required() })
});
Run Code Online (Sandbox Code Playgroud)

先感谢您!

Ank*_*nkh 6

如果您准备接受nullas anid并希望对其执行条件,我建议将该id字段默认为null. 通过这种方式,您可以从有效负载中省略它并仍然使用Joi.when().

例如:

Joi.object().keys({
    id: Joi.number().min(0).allow(null).default(null),
    someOtherField1: Joi.string().when('id', { is: null, then: Joi.required() })
});
Run Code Online (Sandbox Code Playgroud)

通过既一个空对象,{}和具有一个目的null id{ "id": null }将导致:

ValidationError:子“someOtherField1”失败,因为[“someOtherField1”是必需的]


小智 5

Undefined是 Joi 的空值。使用“不是”代替“是”

例子: { not: Joi.exist(), then: Joi.required() }