Cursus NestJS - les DTO를 통한 유효성 검사
11324 단어 javascripttypescriptfrenchnestjs
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:
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.jsAjouter 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 fichier
src/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
})
Reference
이 문제에 관하여(Cursus NestJS - les DTO를 통한 유효성 검사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/webeleon/cursus-nestjs-validation-via-les-dto-2h25텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)