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.
Desafío
FácilPOST /taskscon un campoCreateTaskDtono declara respuestas 400 que mencionen ese campo.- Los cuerpos válidos siguen respondiendo 201.
- Envía
POST /taskscon{ "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();
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.