Nieznane pola
Część sekcji TypeScript i NestJS ścieżki Node.js w Coddy. Lekcja 16 z 24.
Klient może wysłać pola, o których nie wspomina Twój DTO, takie jak { "title": "x", "admin": true }, a one dotrą do Twojego kodu bez zmian. ValidationPipe ma dla nich dwie opcje.
app.useGlobalPipes(
new ValidationPipe({ whitelist: true }),
);whitelist: true usuwa każde pole, które nie ma dekoratora walidacji, zanim metoda zobaczy treść żądania. Dodaj forbidNonWhitelisted: true, a potok zamiast tego odrzuci taką treść, zwracając kod 400 i "property admin should not exist". forbidNonWhitelisted działa tylko w połączeniu z whitelist; samodzielnie nic nie robi.
Ciche usuwanie sprawdza się w przypadku formularza, który wysyła dodatkowe dane wejściowe. Odrzucenie informuje klienta API o literówce, takiej jak titel.
Wyzwanie
ŁatwyKlient może wysłać pola, o których Twoje DTO w ogóle nie wspomina, takie jak "owner": "admin", a obecnie trafiają one do Twojego kodu bez żadnych zmian. Spraw, by API je odrzucało, aby klient dowiedział się o literówce lub podejrzanym dodatkowym polu.
- W
src/main.tsznajdźValidationPipe, którybootstrapjuż rejestruje. Przekaż mu dwie opcje:whitelist: true, która usuwa każde pole bez dekoratora walidacji, orazforbidNonWhitelisted: true, która odrzuca takie żądanie z kodem 400 zamiast usuwać pole. Druga opcja działa tylko w połączeniu z pierwszą. - Nie zmieniaj niczego więcej. Żądania zawierające tylko
titleidonenadal będą działać, a nieprawidłowy tytuł nadal będzie odrzucany.
Wypróbuj: wyślij POST z { "title": "Book flights", "owner": "admin" } do /tasks. Otrzymasz kod 400:
{ "message": ["property owner should not exist"], "error": "Bad Request", "statusCode": 400 }Następnie wyślij POST z { "title": "Book flights" }: otrzymasz kod 201 i nowe zadanie. { "title": 7 } nadal zwróci kod 400.
Spróbuj swoich sił
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();
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji TypeScript i NestJS
Poćwicz samodzielnie: Edytor online Express