0Pricing
NestJS Enterprise Backend APIs · Leçon

DTO et tuyaux de validation

Mettez en œuvre des objets de transfert de données (DTO) et utilisez des tuyaux de validation pour garantir que les données entrantes des requêtes respectent les critères définis.

DTO et tuyaux de validation est une leçon NestJS Enterprise Backend APIs gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage NestJS Enterprise Backend APIs, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours NestJS Enterprise Backend APIs comprend 3 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Why Data Transfer Objects?

When building APIs, your application receives data from users. This data needs to be structured and safe.

Data Transfer Objects (DTOs) are plain classes that define the expected shape of the data coming into your application (e.g., from a request body) or going out (e.g., as a response).

Using DTOs helps with:

  • Clarity: Clearly shows what data is expected.
  • Consistency: Ensures data adheres to a specific format.
  • Security: Prevents unexpected or malicious data from being processed.

Defining a Simple DTO

A DTO is essentially a TypeScript class with properties that match the data you expect. It's a blueprint for your data.

Here's a basic example for creating a new product:

export class CreateProductDto {
  name: string;
  description: string;
  price: number;
}

DTOs in NestJS Context

In a NestJS application, you'll typically create DTO files in a dto folder within your module (e.g., src/products/dto/create-product.dto.ts).

These classes are then used in your controllers to type the incoming request body.

import { Body, Controller, Post } from '@nestjs/common';
import { CreateProductDto } from './dto/create-product.dto';

@Controller('products')
export class ProductsController {
  @Post()
  create(@Body() createProductDto: CreateProductDto) {
    // createProductDto will have 'name', 'description', 'price'
    console.log(createProductDto);
    return 'Product created!';
  }
}

Why Validate Input?

Just defining a DTO isn't enough. What if a user sends invalid data?

  • A name that's too short?
  • A price that's negative or not a number?
  • Missing required fields?

Without validation, your application could:

  • Store bad data.
  • Crash unexpectedly.
  • Be vulnerable to security exploits.

This is where NestJS Validation Pipes come in!

Introducing Validation Pipes

A Validation Pipe is a special type of middleware in NestJS that automatically validates incoming request data against your DTO definitions.

If the data doesn't match the rules you've set, the pipe will automatically throw an error, preventing invalid data from reaching your controller logic.

The Validation Duo: `class-validator` & `class-transformer`

NestJS leverages two powerful libraries for DTO validation:

  • class-validator: Provides decorators (like @IsString(), @IsInt()) to define validation rules directly on your DTO properties.
  • class-transformer: Helps convert plain JavaScript objects (from the request body) into instances of your DTO classes, which is crucial for class-validator to work correctly.

You'll need to install them:

npm i class-validator class-transformer

Decorating Your DTOs for Validation

Let's add some validation rules to our CreateProductDto using decorators from class-validator.

These decorators ensure that the incoming data meets specific criteria, like being a string, a number, or not empty.

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

export class CreateProductDto {
  @IsString()
  @IsNotEmpty()
  name: string;

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

  @IsNumber()
  @IsPositive()
  price: number;
}

Applying `ValidationPipe` to a Route

Now that our DTO has validation decorators, we need to tell NestJS to use the ValidationPipe for a specific route.

You can apply it using the @UsePipes() decorator on your controller method. This makes the pipe active only for that particular route.

import { Controller, Post, Body, UsePipes, ValidationPipe } from '@nestjs/common';
import { CreateProductDto } from './dto/create-product.dto';

@Controller('products')
export class ProductsController {
  @Post()
  @UsePipes(new ValidationPipe()) // Apply pipe here
  create(@Body() createProductDto: CreateProductDto) {
    // If validation fails, this code won't run
    return `Product '${createProductDto.name}' created!`;
  }
}

Global Validation Pipe

Applying @UsePipes(new ValidationPipe()) to every method can be repetitive. For consistency, you can register the ValidationPipe globally in your main.ts file.

This will apply the validation pipe to all incoming requests across your entire application, simplifying your code and ensuring consistent validation.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe()); // Apply pipe globally
  await app.listen(3000);
}
bootstrap();

Check Your Knowledge

Time to test what you've learned about DTOs and Validation Pipes!

Recap: DTOs & Validation Pipes

You've mastered DTOs and Validation Pipes!

  • DTOs are TypeScript classes that define the structure of data for your API.
  • They bring clarity, consistency, and security to your data handling.
  • Validation Pipes automatically enforce rules defined by class-validator decorators.
  • class-transformer ensures incoming data is converted to DTO instances for validation.
  • Pipes can be applied per-route with @UsePipes() or globally in main.ts.

This ensures your NestJS API always receives and processes clean, valid data.

Questions Fréquemment Posées

La leçon « DTO et tuyaux de validation » est-elle gratuite ?

Oui — le texte complet de « DTO et tuyaux de validation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours NestJS Enterprise Backend APIs, passe à CoddyKit PRO. Le cours NestJS Enterprise Backend APIs comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « DTO et tuyaux de validation » ?

Mettez en œuvre des objets de transfert de données (DTO) et utilisez des tuyaux de validation pour garantir que les données entrantes des requêtes respectent les critères définis. Tu pratiques NestJS Enterprise Backend APIs avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer NestJS Enterprise Backend APIs ?

Aucune expérience préalable n'est requise. NestJS Enterprise Backend APIs sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.

Combien de temps prend la leçon « DTO et tuyaux de validation » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon NestJS Enterprise Backend APIs ?

Oui. Chaque leçon NestJS Enterprise Backend APIs inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. L’injection de dépendances expliquée
  2. DTO et tuyaux de validation
  3. Bases de l’intégration de TypeORM
← Retour à NestJS Enterprise Backend APIs