nodejs1 Min Read

Nodejs - Json object schema validation with Joi

Gorav Singal

May 07, 2020

TL;DR

Use Joi's schema validation in Node.js to enforce complex constraints like mutual exclusivity, conditional required fields, and custom error messages on JSON objects.

Nodejs - Json object schema validation with Joi

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.

Share

Related Posts

Mongoose - Using CRUD operations in mongodb in nodejs

Mongoose - Using CRUD operations in mongodb in nodejs

MongoDB CRUD Operations Mongoose provides a simple schema based solution to…

How to check whether a website link has your URL backlink or not - NodeJs implementation

How to check whether a website link has your URL backlink or not - NodeJs implementation

Introduction I got my seo backlink work done from a freelancer. It was like 300…

How to connect to mysql from nodejs, with ES6 promise

How to connect to mysql from nodejs, with ES6 promise

Introduction I had to develop a small automation to query some old mysql data…

WebSockets with Socket.io in Node.js

WebSockets with Socket.io in Node.js

WebSocket vs HTTP Traditional HTTP follows a request/response model — the client…

Testing Node.js — Unit, Integration, and E2E

Testing Node.js — Unit, Integration, and E2E

Testing Strategy A solid testing strategy follows the testing pyramid — many…

Redis — Caching, Sessions, Pub/Sub in Node.js

Redis — Caching, Sessions, Pub/Sub in Node.js

Why Redis for Node.js Redis is an in-memory data store that serves as a cache…

Latest Posts

AI Video Generation in 2025 — Models, Costs, and How to Build a Cost-Effective Pipeline

AI Video Generation in 2025 — Models, Costs, and How to Build a Cost-Effective Pipeline

AI video generation went from “cool demo” to “usable in production” in 2024-202…

AI Models in 2025 — Cost, Capabilities, and Which One to Use

AI Models in 2025 — Cost, Capabilities, and Which One to Use

Choosing the right AI model is one of the most impactful decisions you’ll make…

AI Image Generation in 2025 — Models, Costs, and How to Optimize Spend

AI Image Generation in 2025 — Models, Costs, and How to Optimize Spend

Generating one image with AI costs between $0.002 and $0.12. That might sound…

AI Coding Assistants in 2025 — Every Tool Compared, and Which One to Actually Use

AI Coding Assistants in 2025 — Every Tool Compared, and Which One to Actually Use

Two years ago, AI coding meant one thing: GitHub Copilot autocompleting your…

AI Agents Demystified — It's Just Automation With a Better Brain

AI Agents Demystified — It's Just Automation With a Better Brain

Let’s cut through the noise. If you read Twitter or LinkedIn, you’d think “AI…

Security Ticketing and Incident Response

Security Ticketing and Incident Response

The worst time to figure out your incident response process is during an…