Introduction

In this post, I will show how to validate your json schema validation across veriety of use-cases.

1. You want to allow only one of three params to be REQUIRED parameter

Example, you are having 5 fields. And, for three fields you want either of them to be present. Note: Success criteria is to have only one of these three fields, not 2 not 3.

Example schema validation with Joi:

const validationJoi = Joi.object({
      field1: Joi.string(),
      field2: Joi.string(),
      field3: Joi.string(),
      field4: Joi.string(),
      field5: Joi.string(),
    }).xor('field1', 'field2', 'field3')

const obj = {
  field1: "value1",
  field4: "value4",
};

const isValid = Joi.validate(obj, validationJoi);
//true

const obj2 = {
  field4: "value4",
};

const isValid2 = Joi.validate(obj, validationJoi);
//false

Note the xor above.

Note, this validation can also be used in mongoose schema validations.

const Joi = require('joi');

const mySchema = mongoose.Schema({
  name: String,
  country: String,
  email: String,
  created: { type: Date, default: Date.now }
});

mySchema.methods.schemaValidate = function(obj) {
  const schema = {
    name: Joi.types.String().min(6).max(30).required(),
    country: Joi.types.String().required(),
    email: Joi.types.String().email().required()
    created: Joi.types.Date(),
  }
  return Joi.validate(obj, schema);
}

module.exports = mongoose.model('User', mySchema);

And, in some service code you can call this method schemaValidate on MySchema object.