javascript - Joi validiert eines von zwei Schemata
Ich habe ein einfaches Objekt mit wenigen Feldern, das ich validieren möchte. Ich möchte entweder ein spezifisches Validierungsschema zulassen oder dass alle Eigenschaften leere Werte haben.
Ich habe die folgenden zwei Schemata erstellt:
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(),
});
Ich möchte ein Schema erstellen, das überprüft, ob emptyUserInfoValidationSchema oder nonEmptyUserInfoValidationSchema angewendet wird, aber ich kann nicht herausfinden, wie man das macht. Hat jemand Vorschläge?
erlaubt :
{url:"http://some.url", username:"some username", password:"some password"}
{url:"", username:"", password:""}
nicht erlaubt:
{url:"http://some.url", username:"", password:""}
Antwort #1
Nun habe ich endlich gefunden, wonach ich gesucht habe joi.alternatives:
export const ansibleInfoValidationSchema = Joi.alternatives(emptyUserInfoValidationSchema , nonEmptyUserInfoValidationSchema );
scheint zu funktionieren
Antwort #2
Ich hoffe, das hilft dir, du kannst die when-Bedingung in Joi verwenden
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)
})
});
Hier ist ein Link zu den Docs Joi When Bedingung
