Validación de Datos con Validation Pipe en Node.js

Clase 21 de 23Curso de Backend con NestJS

Resumen

Los DTO ayudan con el tipado y la validación de datos, además de indicar la obligatoriedad de los mismos para que los registros se creen completos. Es importante también evitar que haya datos que no deben estar en las solicitudes, ya que podrían ser ataques maliciosos.

Cómo hacer la prohibición de datos

Busca el archivo main.ts que contiene el bootstrap de tu aplicación, es decir, el punto inicial de la misma. Agrega aquí la siguiente configuración.

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

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true,                    // Ignorar datos que no esten en los DTO
      forbidNonWhitelisted: true,         // Lanzar error si existen datos prohibidos
      disableErrorMessages: true,         // Desabilitar mensajes de error (producción)
    })
  );
  await app.listen(process.env.PORT || 3000);
}
bootstrap();

Importa ValidationPipe desde @nestjs/common y configura en true las propiedades whitelist para ignorar datos que no estén en el DTO. Usa forbidNonWhitelisted para lanzar errores si existen datos prohibidos y disableErrorMessages que es recomendable activarlo solo en producción para no enviar mensajes de error y no dar información al front-end.

De esta simple manera, tus endpoints gracias a los DTO son súper profesionales, seguros y contribuyen a una buena experiencia de desarrollo.

// src/main.ts

app.useGlobalPipes(
  new ValidationPipe({
    whitelist: true,
    forbidNonWhitelisted: true,
  }),
);

Contribución creada por: Kevin Fiorentino.