Usamos cookies para mejorar tu experiencia en el sitio
CodeWorlds

class-validator — Dekoratory strażników bramy

Teraz, gdy wiesz czym jest walidacja, czas poznać class-validator — bibliotekę dekoratorów, która zamienia zwykłe klasy DTO w prawdziwe posterunki strażnicze. Każdy dekorator to jak osobny strażnik specjalizujący się w konkretnym sprawdzeniu.

Instalacja

1npm install class-validator class-transformer

Podstawowe dekoratory

@IsString() — strażnik tekstu

Sprawdza, czy wartość jest łańcuchem znaków. To jak strażnik weryfikujący, czy dokument jest napisany na papyrusie, a nie na kamieniu:

1import { IsString } from 'class-validator';
2
3export class CreateLegionaryDto {
4  @IsString()
5  name: string;  // "Marcus" ✅, 12345 ❌
6}

@IsNumber() — strażnik liczb

Weryfikuje, czy wartość jest liczbą:

1import { IsNumber } from 'class-validator';
2
3export class CreateLegionaryDto {
4  @IsNumber()
5  age: number;  // 25 ✅, "dwadzieścia pięć" ❌
6}

@IsEmail() — strażnik wiadomości

Sprawdza poprawność formatu adresu email:

1import { IsEmail } from 'class-validator';
2
3export class CreateLegionaryDto {
4  @IsEmail()
5  cursusPublicus: string;  // "marcus@roma.com" ✅, "marcus" ❌
6}

@IsNotEmpty() — strażnik pustych pól

Nie przepuści pustych wartości — każde pole musi mieć treść:

1import { IsNotEmpty, IsString } from 'class-validator';
2
3export class CreateLegionaryDto {
4  @IsString()
5  @IsNotEmpty()
6  name: string;  // "Marcus" ✅, "" ❌, null ❌
7}

@MinLength() i @MaxLength() — strażnicy długości

Kontrolują minimalną i maksymalną długość tekstu:

1import { MinLength, MaxLength, IsString } from 'class-validator';
2
3export class CreateLegionaryDto {
4  @IsString()
5  @MinLength(2)
6  @MaxLength(50)
7  name: string;  // "Marcus" ✅, "M" ❌, "A".repeat(51) ❌
8}

Łączenie dekoratorów

Prawdziwa siła class-validator tkwi w łączeniu wielu dekoratorów na jednym polu. To jak kilku strażników sprawdzających różne aspekty jednego dokumentu:

1import {
2  IsString,
3  IsNotEmpty,
4  MinLength,
5  MaxLength,
6  IsNumber,
7  IsEmail,
8  Min,
9  Max,
10} from 'class-validator';
11
12export class CreateLegionaryDto {
13  @IsString()
14  @IsNotEmpty()
15  @MinLength(2)
16  @MaxLength(50)
17  name: string;
18
19  @IsString()
20  @IsNotEmpty()
21  rank: string;
22
23  @IsNumber()
24  @Min(16)
25  @Max(65)
26  age: number;
27
28  @IsEmail()
29  cursusPublicus: string;
30
31  @IsString()
32  @IsNotEmpty()
33  legio: string;
34}

Własne komunikaty błędów

Każdy dekorator przyjmuje opcjonalny parametr z komunikatem błędu — żeby strażnik umiał wytłumaczyć, co jest nie tak:

1export class CreateLegionaryDto {
2  @IsString({ message: 'Imię musi być tekstem, legioniście!' })
3  @IsNotEmpty({ message: 'Imię nie może być puste!' })
4  @MinLength(2, { message: 'Imię musi mieć co najmniej 2 znaki!' })
5  name: string;
6
7  @IsNumber({}, { message: 'Wiek musi być liczbą!' })
8  @Min(16, { message: 'Musisz mieć co najmniej 16 lat, by wstąpić do legionu!' })
9  age: number;
10}

Dzięki class-validator tworzysz silną straż, która automatycznie odrzuca niepoprawne dane jeszcze zanim dotrą do logiki biznesowej. W następnej lekcji poznasz zaawansowane dekoratory!

Ir a CodeWorlds