Usamos cookies para mejorar tu experiencia en el sitio
CodeWorlds

Straż Bramy — Wprowadzenie do walidacji danych

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.

Dlaczego walidacja jest niezbędna?

Wyobraź sobie legionistę, który podchodzi do bramy i twierdzi, że jest senatorem. Strażnik sprawdza:

  • Czy ma odpowiedni dokument tożsamości? (wymagane pola)
  • Czy dokument nie jest sfałszowany? (poprawny format)
  • Czy dane się zgadzają? (reguły biznesowe)

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}

Co to jest DTO?

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}

Narzędzia walidacji w NestJS

NestJS oferuje trzy główne narzędzia do ochrony naszych bram:

  1. class-validator — biblioteka dekoratorów do definiowania reguł walidacji
  2. class-transformer — narzędzie do transformacji danych (konwersja typów, wykluczanie pól)
  3. ValidationPipe — wbudowany pipe NestJS, który automatycznie uruchamia walidację
1// Instalacja strażników bramy
2// npm install class-validator class-transformer

Jak to działa razem?

Cał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 Request

Bez 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!

Ir a CodeWorlds