NestJS 유효성 검사와 타입 변환

00_8_3·2021년 1월 9일
0

NestJS 유효성 검사와 타입 변환

사전 설치

$ npm i class-validation class-transformer

Data Requset

예를들어 회원가입을 할 때 Email과 Password를 사용 시
Server에서 해당 Data를 그림처럼 각각 변수로 받아 줘야한다.

1. HTTP Request Post

{
  "Email" : "admin@test.com",
  "Password": "admin",
}

2. Controller.create

@Post()
async create(
  @Body("Email") Email: string, 
  @Body("Password") Password: string) :Promise<User> {

}

3. Service.create

async create(
  Email: string, 
  Password: string): Promise<User>{
  
const user: User = {
id: uuid(),
  Email,
    Password,
};
this.users.push(user);
return user; // NestJS는 반환값을 자동으로 JSON처리 해준다.
}

4. HTTP Response

"id": "8kl2j3kl4jkljslf",
  "Email": "Admin@test.com",
    "Password": "admin",

DTO란?

Data Transform Object로 JAVA에서 파생된 개념이다.

DTO 작성법

Class vs Interface ??

DTO는 Class나 Interface로 작성 될 수 있다. 어떠한 방법으로 작성하는게 더 좋을까?

  • 1 NestJS DOCS에 따르면 Class로 작성하는 것을 추천한다.
  • 2 Interface는 TS의 개념으로 컴파일 후 보존?되지 않는다.
  • 3 Class가 JS로 들어온 후 컴파일 후 보존된다.
  • 4 그래서 Run-time 중에 Interface는 사용 될 수 없지만 Class는 가능하다.

결론은 DTO작성은 Class로 하자!

Example

DTO를 작성하고 Controller와 Service를 수정하자.

export class CreateUserDTO { // class 작성시 맨앞을 대문자로 해주자!
	email : string;
	password : string;
}
    1. Controller.create 수정
@Post()
async create(@Body() userData: CreateUserDTO ) :Promise<User> {
	return this.userService.create(userData);
}
    1. Service.create 수정
async create(userData: CreateUserDTO): Promise<User>{
  
const user: User = {
id: uuid(),
...userData
};
this.users.push(user);
return user; // NestJS는 반환값을 자동으로 JSON처리 해준다.
}

0개의 댓글