Cursus NestJS - les DTO를 통한 유효성 검사

DTO(Data Transfer Object): Une DTO est un objet qui à pour but de transferer des données entre deux process.

Dans le cadre de ce cours, elles seront principalement utilisé pour définir le format des objets que les endpoint vont accepté en entrée.
les methodes POST, PUT, PATCH, elles valideront principalement les body를 따르십시오.
GET 방법을 사용하면 유효한 쿼리 매개변수를 사용할 수 있습니다.

푸르쿼이 유효성 검사?



Une des régles Importantes du development backend est de ne JAMAIS au grand JAMAIS faire confiance au données entré par un client.
Bloquer les requetes avec de mauvaises données permettra:
  • de simplifier les traitements
  • facilité laconsistence des données persisté
  • 증권사

  • Le second interet et d'ajouter une couche de validation au runtime pour notre application.
    Typescript n'offre qu'une validation du typage à la transpilation, si une données vicié est fournis au runtime tout peu exploser...
    L'utilisation de DTO validé permettra d'ajouter de la validation au runtime pour la communication entre les services.

    Installer les dépendances requise pour la validation



    Afin d'utiliser la validation automatique via le ValidationPipe nous avons besoin d'installer deux dépendances.

    npm i --save class-validator class-transformer
    


    DTO의 정의



    Pour définir une DTO, nous allons devoir créer une classe et appliquer des décorateurs sur ses 속성.
    Une liste exhaustive de décorateur des disponibles sur la page github de la bibliothèqueclass-validator

    Par example, si je souhaite créer une dto pour un formulaire de connexion:

    import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
    
    export class LoginDto {
      @IsEmail()
      email: string;
    
      @IsString()
      @IsNotEmpty()
      password: string;
    }
    


    각 옵션에 대한 완전한 주석을 나열하지 마십시오documentation de class-validator.class-validator étant un wrapper autour de validator.js , suree option sont détaillé dans la documentation de validator.js

    Ajouter la validation sur une route



    Maintenant que nous avons créer les régles de validation via notre DTO, il ne reste qu'à la branché sur le body d'une route post et d'appliquer le pipe de validation:

    import { Body, Controller, HttpCode, Post, UsePipes, ValidationPipe } from '@nestjs/common';
    import { LoginDto } from './login.dto';
    
    @Controller('login')
    export class LoginController {
      @Post()
      @HttpCode(200)
      @UsePipes(new ValidationPipe())
      login(@Body() loginDto: LoginDto) {
        return 'ok'
      }
    }
    


    Activer la validation route par route, c'est bien...
    가장 빠른 속도로 quand même...

    구성자 la validation globalement



    구성 프로그램 la validation sur notre app au global il faudra éditer le fichiersrc/main.ts를 따르십시오.

    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({
        // retire tout les champs qui ne sont pas déclaré dans la dto
        whitelist: true,
        // rejette les requêtes qui contiennent des champs non déclaré dans la dto
        forbidNonWhitelisted: true, 
      }));
    
      await app.listen(3000);
    }
    bootstrap();
    


    종단 간 구성 동일성을 테스트하기 위해서는 가장 필요한 구성이 필요합니다.

    import { Test, TestingModule } from '@nestjs/testing';
    import { INestApplication, ValidationPipe } from '@nestjs/common';
    import * as request from 'supertest';
    import { AppModule } from './../src/app.module';
    
    describe('AppController (e2e)', () => {
      let app: INestApplication;
    
      beforeEach(async () => {
        const moduleFixture: TestingModule = await Test.createTestingModule({
          imports: [AppModule],
        }).compile();
    
        app = moduleFixture.createNestApplication();
    
        // Branchement de la validation global
        app.useGlobalPipes(new ValidationPipe({
          // Ne pas oublier les options de validations
        }));
    
        await app.init();
      });
    
      // La suite de test end 2 en 
    })
    

    좋은 웹페이지 즐겨찾기