Skip to main content

Validation

Any application that requires input from client, runs a validation before performing any action on it. We love how NestJS provides Validation Pipe and makes it so simple to apply validation.

In this boilerplate, there are few extra added validators, which you can use as per your requirement.

BaseValidator​

info

This is just an alternative solution for ValidationPipe, if you wish to continue using DTOs and ValidationPipe, please feel free to do so.

All available decorators will still work for you. 😀

This boilerplate includes a BaseValidator class, which can be used to run validators inside the Services/Providers.

Usage:

import { Injectable } from '@nestjs/common';
import { BaseValidator } from '@app/support/validator';
import { CreateUser } from '../validator';

@Injectable()
export class UserService {
constructor(private validator: BaseValidator) {}

async create(
inputs: Record<string, any>,
): Promise<Record<string, any>> {
await this.validator.fire(inputs, CreateUser);
// add your logic here...
}
}

CreateUser is just our DTO that you will need to create to define the schema of incoming payload. To learn, how you can create DTOs, click here.

Available Decorators​

Exists​

Checks if property is available in the db on the specified table and column.

Options​

OptionDescriptionDefault
tableName of the tableundefined
columnColumn in the tableundefined
caseInsensitiveWill run case insensitive query, if truefalse
whereextra where clause, will be added in the query, passed as Objectundefined
import { Exists } from '@app/core/validator';

export class UpdateUser {
@Exists({ table: 'users', column: 'contactNumber' })
contactNumber: number;
}

IsUnique​

Checks if property is unique or not in the db on the specified table and column.

Options​

OptionDescriptionDefault
tableName of the tableundefined
columnColumn in the tableundefined
caseInsensitiveWill run case insensitive query, if truefalse
whereextra where clause, will be added in the query, passed as Objectundefined
import { IsUnique } from '@app/core/validator';

export class CreateUser {
@IsUnique({ table: 'users', column: 'contactNumber' })
contactNumber: number;
}

IsEqualToProp​

Compares the value of the property to another property in the same class.

import { IsString, IsEqualToProp } from '@app/core/validator';

export class ForgotPassword {
@IsString()
password: string;

@IsEqualToProp('password') // name of the property to be compared with
confirmPasssword: string;
}

IsValueFromConfig​

It is very common to store global configuration values in the Config module and there can be use-case where you may want to compare some property with some property stored in config.

import { IsValueFromConfig } from '@app/core/validator';

export class UpdateDeliveryStatus {
@IsValueFromConfig({ key: 'settings.delivery.status' })
status: number;
}

IsDateInFormatConstraint​

Use this decorator if you want to validate the format of the date/timestamp.

info

Uses moment package internally.

import { IsDateInFormat } from '@app/support/validator';

export class UpdateProfile {
@IsDateInFormat('DD-MM-YYYY')
dob: string;
}