Validating Objects with Joi

I was working on a contract recently where there was a lot of JSON objects passed around from api to api. We investigated lots of validation methods for this type of thing. Simple key value || null sufficed for the simpler objects, however when object values were nested it got a bit tricky. Hence Joi.

Require the module:

const Joi = require('joi');

Create schema of each object:

const exampleSchema = Joi.object().keys({
  a: Joi.string().required(),
  b: Joi.object().keys({ aa: Joi.string().required() }).required()
});

const contextSchema = Joi.object().keys({ statusCode: Joi.number().required(), }).required();

const errorSchema = Joi.object().keys({ sterror: Joi.object().keys({ errorno: Joi.number().required(), }).required(), }).required();

Then use Joi validate method, passing in your object:

Joi.validate({ a: 'a string' }, exampleSchema, (error, value) => {
    console.log('Error:', error);
    console.log('Valid:', value);
});

Joi.validate(undefined, contextSchema, (error, value) => { console.log('Error:', error); console.log('Valid:', value); });

Joi.validate({ statusCode: 201, }, contextSchema, (error, value) => { console.log('Error:', error); console.log('Valid:', value); });

Joi.validate({
  error: ''
}, errorSchema, (error, value) => {
  console.log('Error:', error);
  console.log('Valid:', value);
});

Great to use. Next we will look at JSONSchema.