Menu
CoddyTech

Campos desconocidos

Parte de la sección TypeScript y NestJS del Journey de Node.js de Coddy. Lección 12 de 17.

Un cliente puede enviar campos que tu DTO nunca menciona, como { "title": "x", "admin": true }, y llegan a tu código sin cambios. ValidationPipe tiene dos opciones para ellos.

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

whitelist: true elimina todos los campos que no tengan un decorador de validación antes de que tu método reciba el cuerpo. Añade forbidNonWhitelisted: true y, en su lugar, el pipe rechaza ese cuerpo con un error 400 y "property admin should not exist". forbidNonWhitelisted solo funciona junto con whitelist; por sí solo no hace nada.

Eliminar los campos sin avisar es adecuado para un formulario que envía entradas adicionales. Rechazarlos informa al cliente de una API de que ha cometido un error tipográfico, como titel.

challenge icon

Desafío

Fácil
  • POST /tasks con un campo CreateTaskDto no declara respuestas 400 que mencionen ese campo.
  • Los cuerpos válidos siguen respondiendo 201.
  • Envía POST /tasks con { "title": "Book flights", "owner": "admin" } y, después, con { "title": "Book flights" }.

Pruébalo tú mismo

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

async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    app.useGlobalPipes(new ValidationPipe());
    await app.listen(3000);
}
bootstrap();
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de TypeScript y NestJS