0Pricing
NestJS Enterprise Backend APIs · Lección

DTO y pipes de validación

Implemente objetos de transferencia de datos (DTO) y utilice pipes de validación para garantizar que los datos entrantes cumplan los criterios definidos.

DTO y pipes de validación es una lección gratuita de NestJS Enterprise Backend APIs en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de NestJS Enterprise Backend APIs, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de NestJS Enterprise Backend APIs incluye 3 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

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.

Preguntas frecuentes

¿La lección «DTO y pipes de validación» es gratis?

Sí — el texto completo de «DTO y pipes de validación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de NestJS Enterprise Backend APIs, actualiza a CoddyKit PRO. El curso de NestJS Enterprise Backend APIs incluye 3 lecciones en total.

¿Qué aprenderé en «DTO y pipes de validación»?

Implemente objetos de transferencia de datos (DTO) y utilice pipes de validación para garantizar que los datos entrantes cumplan los criterios definidos. Practicas NestJS Enterprise Backend APIs con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar NestJS Enterprise Backend APIs?

No se requiere experiencia previa. NestJS Enterprise Backend APIs en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.

¿Cuánto tiempo toma la lección «DTO y pipes de validación»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de NestJS Enterprise Backend APIs?

Sí. Cada lección de NestJS Enterprise Backend APIs incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Explicación de la inyección de dependencias
  2. DTO y pipes de validación
  3. Fundamentos de la integración de TypeORM
← Volver a NestJS Enterprise Backend APIs