Solución:
El siguiente código funcionó para mí. Usé alternativas porque .or realmente está probando la existencia de claves y lo que realmente quería era una alternativa en la que permitiera que una clave u otra estuviera vacía.
var console = require("consoleit");
var Joi = require('joi');
var schema = Joi.alternatives().try(
Joi.object().keys({
a: Joi.string().allow(''),
b: Joi.string()
}),
Joi.object().keys({
a: Joi.string(),
b: Joi.string().allow('')
})
);
var tests = [
// both empty - should fail
{a: '', b: ''},
// one not empty - should pass but is FAILING
{a: 'aa', b: ''},
// both not empty - should pass
{a: 'aa', b: 'bb'},
// one not empty, other key missing - should pass
{a: 'aa'}
];
for(var i = 0; i < tests.length; i++) {
console.log(i, Joi.validate(tests[i], schema)['error']);
}
Una forma alternativa de usar Joi.when () que funcionó para mí:
var schema = Joi.object().keys({
a: Joi.string().allow(''),
b: Joi.when('a', { is: '', then: Joi.string(), otherwise: Joi.string().allow('') })
}).or('a', 'b')
.or('a', 'b')
previene a
Y b
siendo nulo (a diferencia de ”).
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)