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…

Supply Chain Security — Protecting Your Software Pipeline

Supply Chain Security — Protecting Your Software Pipeline

In 2024, a single malicious contributor nearly compromised every Linux system on…