Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

333
Views
Joi validate one of two schemas

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:""}
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Well I finally found what I was looking for joi.alternatives:

export const ansibleInfoValidationSchema = Joi.alternatives(emptyUserInfoValidationSchema , nonEmptyUserInfoValidationSchema );

seems to do the trick

about 4 years ago · Juan Pablo Isaza Report

0

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

about 4 years ago · Juan Pablo Isaza Report

0

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');

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!