728x90
class-validator란 ? " typescript를 사용하여 데코레이터로 검증한다! "
너무 간단하게 이야기 했나? 짧고 시원하게 이해가 가도록 설명하겠다!
첫 번째 이해 방법: POST 요청의 라우터 핸들러가 있고 @Param 또는 @Body 여기에서 JSON의 body를 받는다 -> class-transformer로 클래스 인스턴스로 변환 -> class-validator로 userId가 email형식으로 써졌나 ? 뭐 이런 느낌 ( 아래의 예시 참고)
친절한 NestJS는 뭐가 이상한 지 다 알고있고 계획이 있다 캬 죠타..
일단 Install 유남셍?
- 사전 설치: npm i --save class-validator class-transformer
- Typescript는 가능 / Vanilla Javascript 불가
NestJS 공홈 Pipes 탭
DTO: CreateMemberInput 클래스
import { IsEmail, IsString } from "class-validator"; //#설치 필요!!
export class CreateMemberInput
{
@IsString()
@IsEmail()
userId: string;
password: string;
address: string;
memberType: string;
}
Controller: MemberController에서 회원가입 라우트 핸들러
import {Body, Controller, Post } from '@nestjs/common';
@Controller('member')
export class MemberController {
constructor(private memberService: MemberService) {
this.memberService = memberService;
}
//#CreateMemberInput은 DTO
@Post('/join')
signUpForMembership(@Body() memberInfo: CreateMemberInput) {
try {
return this.memberService.signUpForMembership(memberInfo);
} catch {
console.error();
}
}
}
설정1 : app.module.ts
//이 파일은 app.module.ts
import { Module, ValidationPipe } from '@nestjs/common';
import { APP_PIPE } from '@nestjs/core';
@Module({
providers: [
{
provide: APP_PIPE,
useClass: ValidationPipe, // #기본 제공되는 ValidationPipe
},
],
})
export class AppModule {}
설정2: main.ts
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common/pipes/validation.pipe';
import { NestFactory } from '@nestjs/core';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
//# 글로벌 파이프 파라미터에 ValidationPipe 인스턴스 생성해서 넣어준다.
app.useGlobalPipes(
new ValidationPipe({
disableErrorMessages: true, // 프로덕트 단계에서 세부 에러 비활성
}),
await app.listen(3000);
}
bootstrap();
728x90