Unbekannte Felder
Teil des Abschnitts TypeScript und NestJS der Node.js-Journey von Coddy. Lektion 12 von 17.
Ein Client kann Felder senden, die in deinem DTO nie erwähnt werden, etwa { "title": "x", "admin": true }, und sie erreichen deinen Code unverändert. ValidationPipe bietet dafür zwei Optionen.
app.useGlobalPipes(
new ValidationPipe({ whitelist: true }),
);whitelist: true entfernt jedes Feld ohne Validierungsdekorator, bevor deine Methode den Body sieht. Füge forbidNonWhitelisted: true hinzu, und die Pipe weist einen solchen Body stattdessen mit 400 und "property admin should not exist" zurück. forbidNonWhitelisted funktioniert nur zusammen mit whitelist; allein bewirkt es nichts.
Stilles Entfernen eignet sich für ein Formular, das zusätzliche Eingaben sendet. Zurückweisen weist einen API-Client auf seinen Tippfehler hin, etwa titel.
Aufgabe
EinfachPOST /tasksmit einem FeldCreateTaskDtoliefert keine Antwort mit Status 400, in der dieses Feld genannt wird.- Gültige Anfragetexte liefern weiterhin Status 201.
- Sende
POST /tasksmit{ "title": "Book flights", "owner": "admin" }und anschließend mit{ "title": "Book flights" }.
Probier es selbst
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();
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.