es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validar una de las dos estructuras de Joi.

Tengo un objeto simple con unos 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 puedo entender cómo hacerlo, ¿alguna sugerencia?

permitido:

{url: "http://some.url", username: "some username", password: "some password"}
{url: "", username: "", password: ""}

no permitido:

{url: "http://some.url",  username: "", password: ""}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para validar si se aplica emptyUserInfoValidationSchema o nonEmptyUserInfoValidationSchema, puedes utilizar Joi.alternatives() para crear un esquema que permita cualquiera de los dos esquemas.

    const userInfoValidationSchema = Joi.alternatives().try(nonEmptyUserInfoValidationSchema, emptyUserInfoValidationSchema);
    

    Este esquema permitirá cualquier objeto que cumpla con nonEmptyUserInfoValidationSchema o emptyUserInfoValidationSchema.

    Para asegurarse de que todas las propiedades tengan valores vacíos, puedes añadir la restricción .empty() a cada campo en nonEmptyUserInfoValidationSchema, de la siguiente manera:

    const nonEmptyUserInfoValidationSchema = Joi.object({
        url: Joi.string().uri().required().empty(),
        username: Joi.string().required().min(usernameMinLength).empty(),
        password: Joi.string().required().min(passwordMinLength).empty(),
    });
    

    Ahora, el nonEmptyUserInfoValidationSchema permitirá objetos con valores de cadena vacíos para cada una de sus propiedades.

    Con estos cambios, el userInfoValidationSchema permitirá objetos con valores completamente vacíos, así como objetos que cumplan con nonEmptyUserInfoValidationSchema.

Comments are closed.