Tengo un objeto simple con pocos campos que me gustaría validar. Deseo permitir un esquema de validación específico o que todas las propiedades tengan valores vacíos
Creé los siguientes dos esquemas:
const nonEmptyUserInfoValidationSchema = Joi.object({ url: Joi.string().uri().required(), username: Joi.string().required().min(usernameMinLength), password: Joi.string().required().min(passwordMinLength), }); const emptyUserInfoValidationSchema = Joi.object({ url: Joi.string().empty().required(), username: Joi.string().empty().required(), password: Joi.string().empty().required(), }); Deseo crear un esquema que valide si se aplica emptyUserInfoValidationSchema o nonEmptyUserInfoValidationSchema pero no sé cómo hacerlo, ¿alguna sugerencia?
permitió:
{url:"http://some.url", username:"some username", password:"some password"} {url:"", username:"", password:""}No permitido:
{url:"http://some.url", username:"", password:""}Bueno, finalmente encontré lo que estaba buscando joi.alternatives :
export const ansibleInfoValidationSchema = Joi.alternatives(emptyUserInfoValidationSchema , nonEmptyUserInfoValidationSchema );Parece funcionar
Espero que esto te ayude, puedes usar la condición when en Joi
var schema = Joi.object({ url : Joi.any().when('username',{is: Joi.empty(), then: Joi.empty().required(),otherwise: Joi.string().required()}), username: Joi.when('password',{is: Joi.empty(), then: Joi.empty(),otherwise: Joi.string().required().min(usernameMinLength)}) });aquí hay un enlace a when docs Joi When Condtion
.keys().and() para especificar compañeros. Esto significa que ninguno de los campos especificados en .and() existirá uno sin el otro. Por lo tanto, debe usarse como tal:
const schema = Joi.object({ url: Joi.string().uri(), username: Joi.string().min(usernameMinLength), password: Joi.string().min(passwordMinLength) }).keys().and('url', 'username', 'password');