Menu
CoddyTech

Champs inconnus

Fait partie de la section TypeScript et NestJS du Journey Node.js de Coddy. Leçon 12 sur 17.

Un client peut envoyer des champs que votre DTO ne mentionne jamais, comme { "title": "x", "admin": true }, et ils parviennent à votre code sans être modifiés. ValidationPipe propose deux options pour les gérer.

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

whitelist: true supprime tous les champs qui n’ont aucun décorateur de validation avant que votre méthode ne reçoive le corps de la requête. Ajoutez forbidNonWhitelisted: true et le pipe refuse plutôt un tel corps, avec une erreur 400 et "property admin should not exist". forbidNonWhitelisted ne fonctionne qu’avec whitelist ; utilisé seul, il ne fait rien.

La suppression silencieuse convient à un formulaire qui envoie des champs supplémentaires. Le refus signale à un client d’API sa faute de frappe, par exemple titel.

challenge icon

Défi

Facile
  • POST /tasks avec un champ CreateTaskDto ne renvoie pas de réponse 400 indiquant le nom de ce champ.
  • Les corps valides renvoient toujours une réponse 201.
  • Envoyez POST /tasks avec { "title": "Book flights", "owner": "admin" }, puis avec { "title": "Book flights" }.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de TypeScript et NestJS