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

324
Views
Joi validation - allow field to be optional but when supplied must be a positive integer

I have a field in a JOI schema that I would like to be optional (i.e. undefined is accepted, and null is also accepted), however if a value for it is supplied, it must be a positive integer. How might I go about achieving this?

Here is what I have tried so far, with the field to validate being "capacity" however it does not seem to work, it appears the ".when" statement is just being ignored:

const divebarSchema = joi.object({
  divebar: joi
    .object({
      title: joi.string().required(),
      capacity: joi.optional().allow(null),
      description: joi.string().required(),
      location: joi.string().required(),
      image: joi.string().optional().allow(""),
      map: joi.string().optional().allow(""),
    })
    .required()
    .when(joi.object({ capacity: joi.exist() }), {
      then: joi.object({ capacity: joi.number().integer().min(0) }),
    }),
});

Before the above I originally had no .when and instead the capacity rule was:

  capacity: joi.number().optional().allow(null).integer().min(0),

However that also did not work, it kept throwing the error "must be a number" when submitting a null value.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

According to Joi documentation optional does not include null you need to use allow

capacity: Joi.number().optional().integer().min(0).allow(null)
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!