DTO'er og validation pipes
Implementér Data Transfer Objects (DTO'er), og brug validation pipes til at sikre, at indgående requestdata opfylder de definerede kriterier.
DTO'er og validation pipes er en gratis NestJS-backend-API'er til virksomheder-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i NestJS-backend-API'er til virksomheder, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. NestJS-backend-API'er til virksomheder-kurset indeholder 3 lektioner i alt.
Hvorfor Data Transfer Objects?
Når du bygger API'er, modtager din applikation data fra brugere. Disse data skal struktureres og være sikre.
Data Transfer Objects (DTO'er) er simple klasser, der definerer den forventede struktur for de data, der kommer ind i din applikation (f.eks. fra en forespørgselsbrødtekst) eller sendes ud (f.eks. som et svar).
Brug af DTO'er hjælper med:
- Overskuelighed: Viser tydeligt, hvilke data der forventes.
- Konsistens: Sikrer, at data følger et bestemt format.
- Sikkerhed: Forhindrer, at uventede eller skadelige data behandles.
Definition af en simpel DTO
En DTO er grundlæggende en TypeScript-klasse med egenskaber, der svarer til de data, du forventer. Den fungerer som en skabelon for dine data.
Her er et grundlæggende eksempel på oprettelse af et nyt produkt:
export class CreateProductDto {
name: string;
description: string;
price: number;
}DTO'er i NestJS-sammenhæng
I en NestJS-applikation opretter du typisk DTO-filer i en dto-mappe i dit modul (f.eks. src/products/dto/create-product.dto.ts).
Disse klasser bruges derefter i dine controllere til at angive typen for den indkommende forespørgselsbrødtekst.
import { Body, Controller, Post } from '@nestjs/common';
import { CreateProductDto } from './dto/create-product.dto';
@Controller('products')
export class ProductsController {
@Post()
create(@Body() createProductDto: CreateProductDto) {
// createProductDto will have 'name', 'description', 'price'
console.log(createProductDto);
return 'Product created!';
}
}Hvorfor validere input?
Det er ikke nok blot at definere en DTO. Hvad nu, hvis en bruger sender ugyldige data?
- Et
name, der er for kort? - En
price, der er negativ eller ikke er et tal? - Manglende obligatoriske felter?
Uden validering kan din applikation:
- Gemmer dårlige data.
- Gå ned uventet.
- Være sårbar over for sikkerhedsudnyttelser.
Det er her, NestJS' Validation Pipes kommer ind i billedet!
Introduktion til Validation Pipes
En Validation Pipe er en særlig type middleware i NestJS, der automatisk validerer indkommende forespørgselsdata i forhold til dine DTO-definitioner.
Hvis dataene ikke følger de regler, du har angivet, kaster pipen automatisk en fejl og forhindrer ugyldige data i at nå din controllerlogik.
Valideringsduoen: `class-validator` og `class-transformer`
NestJS benytter to effektive biblioteker til DTO-validering:
class-validator: Tilbyder dekoratorer (f.eks.@IsString()og@IsInt()) til at definere valideringsregler direkte på dine DTO-egenskaber.class-transformer: Hjælper med at konvertere almindelige JavaScript-objekter (fra forespørgselsbrødteksten) til instanser af dine DTO-klasser, hvilket er afgørende for, atclass-validatorfungerer korrekt.
Du skal installere dem:
npm i class-validator class-transformer
Dekorering af dine DTO'er til validering
Lad os tilføje nogle valideringsregler til vores CreateProductDto ved hjælp af dekoratorer fra class-validator.
Disse dekoratorer sikrer, at de indkommende data opfylder bestemte kriterier, f.eks. at de er en tekststreng eller et tal, eller at de ikke er tomme.
import { IsString, IsNumber, IsNotEmpty, IsPositive } from 'class-validator';
export class CreateProductDto {
@IsString()
@IsNotEmpty()
name: string;
@IsString()
@IsNotEmpty()
description: string;
@IsNumber()
@IsPositive()
price: number;
}Anvendelse af `ValidationPipe` på en rute
Nu hvor vores DTO har valideringsdekoratorer, skal vi fortælle NestJS, at den skal bruge ValidationPipe til en bestemt rute.
Du kan anvende den ved hjælp af dekoratoren @UsePipes() på din controllermetode. Det gør pipen aktiv kun for den pågældende rute.
import { Controller, Post, Body, UsePipes, ValidationPipe } from '@nestjs/common';
import { CreateProductDto } from './dto/create-product.dto';
@Controller('products')
export class ProductsController {
@Post()
@UsePipes(new ValidationPipe()) // Apply pipe here
create(@Body() createProductDto: CreateProductDto) {
// If validation fails, this code won't run
return `Product '${createProductDto.name}' created!`;
}
}Global Validation Pipe
Det kan blive gentagende at anvende @UsePipes(new ValidationPipe()) på hver metode. For at sikre konsistens kan du registrere ValidationPipe globalt i din main.ts-fil.
Det anvender valideringspipen på alle indkommende forespørgsler i hele din applikation, hvilket forenkler din kode og sikrer ensartet validering.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe()); // Apply pipe globally
await app.listen(3000);
}
bootstrap();Test din viden
Det er tid til at teste, hvad du har lært om DTO'er og Validation Pipes!
Opsummering: DTO'er og Validation Pipes
Du har fået styr på DTO'er og Validation Pipes!
- DTO'er er TypeScript-klasser, der definerer datastrukturen for dit API.
- De giver overskuelighed, konsistens og sikkerhed i din datahåndtering.
- Validation Pipes håndhæver automatisk regler, der er defineret af
class-validator-dekoratorer. class-transformersikrer, at indkommende data konverteres til DTO-instanser til validering.- Pipes kan anvendes pr. rute med
@UsePipes()eller globalt imain.ts.
Det sikrer, at dit NestJS-API altid modtager og behandler rene, gyldige data.
Lær TypeScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 20
- Lektioner
- 76
Ofte stillede spørgsmål
Er lektionen “DTO'er og validation pipes” gratis?
Ja — hele teksten til “DTO'er og validation pipes” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af NestJS-backend-API'er til virksomheder-kurset, skal du opgradere til CoddyKit PRO. NestJS-backend-API'er til virksomheder-kurset indeholder 3 lektioner i alt.
Hvad lærer jeg i “DTO'er og validation pipes”?
Implementér Data Transfer Objects (DTO'er), og brug validation pipes til at sikre, at indgående requestdata opfylder de definerede kriterier. Du øver dig i NestJS-backend-API'er til virksomheder med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på NestJS-backend-API'er til virksomheder?
Der kræves ingen tidligere erfaring. NestJS-backend-API'er til virksomheder på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.
Hvor lang tid tager lektionen “DTO'er og validation pipes”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne NestJS-backend-API'er til virksomheder-lektion?
Ja. Alle NestJS-backend-API'er til virksomheder-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Dependency injection forklaret
- DTO'er og validation pipes
- Grundlæggende TypeORM-integration