Salve, legioniście! Dotarłeś do jednej z najważniejszych lokacji w naszym Imperium — Bramy Głównej (Porta Praetoria). Każdy, kto chce wejść do miasta, musi przejść przez kontrolę strażników. Tak samo każde żądanie HTTP, które trafia do naszego serwera, powinno być dokładnie sprawdzone zanim dotrze do logiki biznesowej.
Walidacja danych to proces weryfikacji, czy dane przychodzące od użytkowników są poprawne, bezpieczne i zgodne z oczekiwaniami. Bez walidacji nasz serwer jest jak otwarta brama — każdy może wejść z czymkolwiek.
Wyobraź sobie legionistę, który podchodzi do bramy i twierdzi, że jest senatorem. Strażnik sprawdza:
W świecie NestJS mamy do czynienia z analogiczną sytuacją:
1// BEZ walidacji - brama otwarta na oścież!
2@Post('legionaries')
3createLegionary(@Body() body: any) {
4 // Ktoś może wysłać cokolwiek!
5 // { name: 12345, rank: null, age: "kot" }
6 return this.service.create(body);
7}
8
9// Z walidacją - strażnicy na posterunku!
10@Post('legionaries')
11createLegionary(@Body() dto: CreateLegionaryDto) {
12 // Dane są sprawdzone zanim dotrzą tutaj
13 // name musi być stringiem, rank musi istnieć, age musi być liczbą
14 return this.service.create(dto);
15}DTO (Data Transfer Object) to jak oficjalny dokument imperialny — określa dokładnie, jakie pola powinny się w nim znajdować i jakiego typu mają być. W NestJS tworzymy klasy DTO, które opisują kształt danych wejściowych:
1// DTO to jak formularz imperialny
2export class CreateLegionaryDto {
3 name: string; // Imię legionisty
4 rank: string; // Ranga
5 age: number; // Wiek
6 legio: string; // Nazwa legionu
7}NestJS oferuje trzy główne narzędzia do ochrony naszych bram:
1// Instalacja strażników bramy
2// npm install class-validator class-transformerCały proces walidacji w NestJS wygląda następująco:
1// 1. Żądanie HTTP przychodzi do serwera
2// POST /legionaries { name: "Marcus", age: 25 }
3
4// 2. ValidationPipe przechwytuje dane
5// ValidationPipe uruchamia class-transformer (konwersja typów)
6// Następnie class-validator (sprawdzenie reguł)
7
8// 3. Jeśli dane są poprawne → przekazuje do kontrolera
9// Jeśli dane są niepoprawne → zwraca błąd 400 Bad RequestBez tych narzędzi musielibyśmy ręcznie sprawdzać każde pole w każdym endpoincie — to jak gdyby kazać każdemu centurionowi osobiście weryfikować dokumenty zamiast mieć wyszkolonych strażników bramy.
W kolejnych lekcjach poznasz każde z tych narzędzi szczegółowo. Przygotuj się, bo straż bramy nie zna litości dla niepoprawnych danych!