NestJS-yritysbackendien API:t · Oppitunti

DTO:t ja validointiputket

Toteuttakaa Data Transfer Object -oliot (DTO:t) ja käyttäkää validointiputkia varmistaaksenne saapuvien pyyntötietojen täyttävän määritetyt ehdot.

Oppitunti 2/311 vaihetta

DTO:t ja validointiputket on ilmainen NestJS-yritysbackendien API:t-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu NestJS-yritysbackendien API:t-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. NestJS-yritysbackendien API:t-kurssilla on yhteensä 3 oppituntia.

Miksi tiedonsiirto-objekteja käytetään?

Rajapintoja rakentaessanne sovelluksenne vastaanottaa tietoja käyttäjiltä. Tietojen on oltava jäsenneltyjä ja turvallisia.

Data Transfer Objects (DTOs) ovat yksinkertaisia luokkia, jotka määrittävät sovellukseenne tulevien tietojen (esimerkiksi pyyntötekstin) tai sovelluksestanne lähtevien tietojen (esimerkiksi vastauksen) odotetun rakenteen.

DTO:iden käyttö auttaa seuraavissa asioissa:

  • Selkeys: Osoittaa selkeästi, mitä tietoja odotetaan.
  • Yhdenmukaisuus: Varmistaa, että tiedot noudattavat tiettyä muotoa.
  • Turvallisuus: Estää odottamattomien tai haitallisten tietojen käsittelyn.

Yksinkertaisen DTO:n määrittäminen

DTO on pohjimmiltaan TypeScript-luokka, jonka ominaisuudet vastaavat odottamianne tietoja. Se toimii tietojenne mallina.

Tässä on perusesimerkki uuden tuotteen luomisesta:

export class CreateProductDto {
  name: string;
  description: string;
  price: number;
}

DTO:t NestJS-kontekstissa

NestJS-sovelluksessa DTO-tiedostot luodaan yleensä moduulin sisällä olevaan dto-kansioon (esimerkiksi src/products/dto/create-product.dto.ts).

Luokkia käytetään sitten ohjaimissa saapuvan pyynnön rungon tyypittämiseen.

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!';
  }
}

Miksi syöte validoidaan?

Pelkkä DTO:n määrittäminen ei riitä. Entä jos käyttäjä lähettää virheellisiä tietoja?

  • Liian lyhyen name-arvon?
  • Negatiivisen tai muun kuin numeromuotoisen price-arvon?
  • Pakollisia kenttiä puuttuu?

Ilman validointia sovelluksenne saattaa:

  • Tallentaa virheellisiä tietoja.
  • Kaataa sovelluksen odottamatta.
  • Olla altis tietoturvahyökkäyksille.

Tässä kohtaa NestJS:n validointiputket tulevat avuksi!

Validointiputkien esittely

Validointiputki on NestJS:n erityinen middleware-tyyppi, joka validoi saapuvat pyynnön tiedot automaattisesti DTO-määrittelyjen perusteella.

Jos tiedot eivät vastaa määrittämiänne sääntöjä, putki heittää automaattisesti virheen ja estää virheellisten tietojen päätymisen ohjainlogiikkaan.

Validoinnin kaksikko: `class-validator` ja `class-transformer`

NestJS hyödyntää DTO:iden validointiin kahta tehokasta kirjastoa:

  • class-validator: Tarjoaa dekorointiominaisuuksia, kuten @IsString() ja @IsInt(), joiden avulla validointisäännöt määritetään suoraan DTO:n ominaisuuksille.
  • class-transformer: Auttaa muuntamaan tavalliset JavaScript-oliot (pyynnön rungosta) DTO-luokkien ilmentymiksi. Tämä on tärkeää, jotta class-validator toimii oikein.

Kirjastot on asennettava:

npm i class-validator class-transformer

DTO:iden koristelu validointia varten

Lisätään CreateProductDto-luokkaan validointisääntöjä class-validator-kirjaston dekorointiominaisuuksilla.

Nämä dekorointiominaisuudet varmistavat, että saapuvat tiedot täyttävät tietyt ehdot, kuten että ne ovat merkkijonoja tai numeroita eivätkä tyhjiä.

import { IsString, IsNumber, IsNotEmpty, IsPositive } from 'class-validator';

export class CreateProductDto {
  @IsString()
  @IsNotEmpty()
  name: string;

  @IsString()
  @IsNotEmpty()
  description: string;

  @IsNumber()
  @IsPositive()
  price: number;
}

`ValidationPipe`-putken käyttäminen reitillä

Nyt kun DTO:ssamme on validointiin käytettäviä dekorointiominaisuuksia, NestJS on ohjeistettava käyttämään ValidationPipe-putkea tietyllä reitillä.

Voitte ottaa sen käyttöön ohjaimen metodissa @UsePipes()-dekorointiominaisuudella. Tällöin putki on aktiivinen vain kyseisellä reitillä.

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!`;
  }
}

Globaali validointiputki

@UsePipes(new ValidationPipe())-kutsun lisääminen jokaiseen metodiin voi olla toistuvaa. Yhdenmukaisuuden vuoksi voitte rekisteröidä ValidationPipe-putken globaalisti main.ts-tiedostossa.

Tällöin validointiputkea käytetään kaikissa koko sovelluksen saapuvissa pyynnöissä, mikä yksinkertaistaa koodia ja varmistaa yhdenmukaisen validoinnin.

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();

Testaa tietosi

On aika testata, mitä opitte DTO:ista ja validointiputkista!

Kertaus: DTO:t ja validointiputket

Hallitsette nyt DTO:t ja validointiputket!

  • DTO:t ovat TypeScript-luokkia, jotka määrittävät rajapinnan tietojen rakenteen.
  • Ne tuovat selkeyttä, yhdenmukaisuutta ja turvallisuutta tietojen käsittelyyn.
  • Validointiputket valvovat automaattisesti class-validator-dekorointiominaisuuksilla määritettyjä sääntöjä.
  • class-transformer varmistaa, että saapuvat tiedot muunnetaan DTO-ilmentymiksi validointia varten.
  • Putkia voidaan käyttää reittikohtaisesti @UsePipes()-dekorointiominaisuudella tai globaalisti main.ts-tiedostossa.

Näin NestJS-rajapintanne vastaanottaa ja käsittelee aina puhtaita ja kelvollisia tietoja.

Aloita maksutta

Opi TypeScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
20
Oppitunnit
76

Usein kysytyt kysymykset

Onko oppitunti ”DTO:t ja validointiputket” ilmainen?

Kyllä – oppitunnin ”DTO:t ja validointiputket” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko NestJS-yritysbackendien API:t-kurssin, päivitä CoddyKit PROhon. NestJS-yritysbackendien API:t-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”DTO:t ja validointiputket”?

Toteuttakaa Data Transfer Object -oliot (DTO:t) ja käyttäkää validointiputkia varmistaaksenne saapuvien pyyntötietojen täyttävän määritetyt ehdot. Harjoittelet NestJS-yritysbackendien API:t-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni NestJS-yritysbackendien API:t-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin NestJS-yritysbackendien API:t-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.

Kuinka kauan ”DTO:t ja validointiputket”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä NestJS-yritysbackendien API:t-oppitunnilla?

Kyllä. Jokainen NestJS-yritysbackendien API:t-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Riippuvuuksien injektointi selitettynä
  2. DTO:t ja validointiputket
  3. TypeORM-integraation perusteet
← Takaisin: NestJS-yritysbackendien API:t