I have a simple object with few fields that I would like to validate. I wish to allow or a specific validation schema or that all of the properties have empty values
I created the following two schemas:
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(),
});
I wish to create schema that validates if emptyUserInfoValidationSchema
or nonEmptyUserInfoValidationSchema
is applied but I can't figure out how to do it, any suggestions?
allowed:
{url:"http://some.url", username:"some username", password:"some password"}
{url:"", username:"", password:""}
not allowed:
{url:"http://some.url", username:"", password:""}
I hope this helps you can use the when condition in 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)})
});
here's a link to when docs Joi When Condtion
Well I finally found what I was looking for joi.alternatives
:
export const ansibleInfoValidationSchema = Joi.alternatives(emptyUserInfoValidationSchema , nonEmptyUserInfoValidationSchema );
seems to do the trick
You use the .keys().and()
to specify peers. This means that none of the fields specified in the .and()
will exist without each other. Hence should be used as so:
const schema = Joi.object({ url: Joi.string().uri(), username: Joi.string().min(usernameMinLength), password: Joi.string().min(passwordMinLength) }).keys().and('url', 'username', 'password');
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.