DEV Community

mark vachi
mark vachi

Posted on

Efficient Data Validation in Nestjs using class-validator: A Quick Guide

Nestjs is a Node.js framework for building efficient server-side apps. It uses TypeScript and integrates class-validator for data validation. To validate DTOs, which define data shapes, you add decorators like @IsEmail() or @IsNotEmpty() to class properties. For instance, a CreateUserDto class might look like:

import { IsEmail, IsNotEmpty, IsString } from 'class-validator';

export class CreateUserDto {
  @IsEmail()
  email: string;

  @IsNotEmpty()
  @IsString()
  password: string;

  @IsNotEmpty()
  @IsString()
  name: string;
}
Enter fullscreen mode Exit fullscreen mode

To globally apply validation, use the ValidationPipe in your main.ts:

import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();
Enter fullscreen mode Exit fullscreen mode

For testing, use class-validator's functions like plainToClass and validateSync. A Jest unit test example:

import { plainToClass } from 'class-transformer';
import { validateSync } from 'class-validator';
import { CreateUserDto } from './create-user.dto';

describe('CreateUserDto', () => {
  it('should be valid with valid properties', () => {
    const createUserDto = plainToClass(CreateUserDto, {
      email: 'admin@gmail.com',
      password: 'xxxxxxxx',
      name: 'Admin',
    });
    const errors = validateSync(createUserDto);
    expect(errors).toHaveLength(0);
  });

  it('should be invalid with invalid properties', () => {
    const createUserDto = plainToClass(CreateUserDto, {
      email: 'admin@gmail.com',
      password: 'xxxxxxxx',
      name: null,
    });
    const errors = validateSync(createUserDto);
    expect(errors).toHaveLength(1);
    // Check error details...
  });
});
Enter fullscreen mode Exit fullscreen mode

Nestjs and class-validator simplify building and testing apps by using decorators to validate data. For more info, see the official Nestjs and class-validator documentation.

Top comments (0)