javascript - Joi - ¿not.exist()?
Estoy tratando de hacer una validación con Joi, pero llegué a un escenario que no puedo lograr. Tengo un objeto. En algunos casos, el objeto tendrá un id (editar) y en otros no (crear).
Quiero validar que en caso de que no esté presente el "id", deben estar presentes algunos otros campos.
Hasta ahora, mi única solución que funciona es cuando id es nulo y no está ausente en absoluto. ¿Hay alguna manera de coincidir con una clave que no existe o debería cambiarlo a nulo (un poco hackeado)?
joi.object().keys({
id: joi
.number()
.min(0)
.allow(null),
someOtherField1: joi.when("id", { is: null, then: joi.required() })
});
¡Gracias de antemano!
Respuesta #1
Undefined es el valor vacío para Joi. Usa "not" en lugar de "is"
Ejemplo: { not: Joi.exist(), then: Joi.required() }
Respuesta #2
Si estás preparado para aceptar null como un id y te gustaría realizar condicionales sobre él, sugeriría establecer por defecto el campo id como null. De esta manera, puedes omitirlo del payload y aún así consultarlo usando Joi.when().
Por ejemplo:
Joi.object().keys({
id: Joi.number().min(0).allow(null).default(null),
someOtherField1: Joi.string().when('id', { is: null, then: Joi.required() })
});
Pasar tanto un objeto vacío, {}, como un objeto con un id null, { "id": null }, dará como resultado:
ValidationError: el campo hijo "someOtherField1" falla porque ["someOtherField1" es obligatorio]
