Nest DTO 설정 방법
2022. 4. 20. 10:45ㆍNest.js
DTO : 계층간 데이터 교환을 위한 객체
DTO객체로 만들어서 Vaildation과 타이핑 검사를 진행하고 데이터가 들어오면 중간에서 검증을 진행한다.
[ Client => (DTO) Controller => (DTO) Service => (DTO) DB ]에 맞게 전달 한다.
사용방법
1. 설치
npm i --save class-validator class-transformer
2. 설정
main.ts 에서 DTO의 Validator를 사용하기 위해 app.useGlobalPipes(new ValidationPipe())를 넣어준다
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(process.env.PORT);
}
bootstrap();
3. DTO 생성
ex) users.dto.ts 파일 생성
class-validator에서 사용하려는 vaildation를 import한다.
import { IsNotEmpty, IsString } from 'class-validator';
export class FindUserIdDto {
@IsNotEmpty()
@IsString()
hp: string;
}
export class FindUserCheckDto {
@IsNotEmpty()
@IsString()
id: string;
@IsNotEmpty()
@IsString()
hp: string;
}
export class PasswordChangeDto {
@IsNotEmpty()
@IsString()
id: string;
@IsNotEmpty()
@IsString()
pwd: string;
}
사용 방법 :
한 개의 vaildate를 사용 할 경우
@vaildate함수명
변수 명
으로 사용이 가능하다.
여러 개 vaildate를 사용 할 경우
@vaildate함수명
@vaildate함수명
@vaildate함수명
변수 명
으로 붙여서 사용 할 수 있다.
DTO 클래스를 여러개 만든이유는
하나의 DTO 클래스가 필요한게 아니니 다른 request가 오는 데이터에 맞춰 Class를 만들어 준다.
@IsNotEmpty : 해당 변수는 null 이거나 undifined가 되면 안된다.
@IsString : 해당변수는 String이다.
class - vaildation 목록 https://www.npmjs.com/package/class-validator
4. 만든 DTO 사용
간단하게 타입을 넣는곳에 만들어준 DTO클래스를 넣어주면된다.
4-1. Controller
//user.cotroller.ts
import { UsersService } from './users.service';
import { Controller, Post, Put, Get, Param, Body } from '@nestjs/common';
import {
FindUserIdDto,
FindUserCheckDto,
PasswordChangeDto,
} from './users.dto';
@Controller('users')
export class UsersController {
constructor(private readonly userService: UsersService) {}
// 핸드폰 번호로 아이디 찾기
@Get(':hp')
async findUserId(@Param() param: FindUserIdDto) {
console.log(param);
return await this.userService.findUserId(param);
}
// 핸드폰번호, 아이디로 유저 존재 확인
@Post('check')
async findUserCheck(@Body() body: FindUserCheckDto) {
return await this.userService.findUserCheck(body);
}
//비밀번호 변경
@Put('password')
async passwordChange(@Body() body: PasswordChangeDto) {
return await this.userService.passwordChange(body);
}
}
4-2. Service
//user.service.ts
import { Injectable } from '@nestjs/common';
import {
FindUserIdDto,
FindUserCheckDto,
PasswordChangeDto,
} from './users.dto';
@Injectable()
export class UsersService {
async findUserId(param: FindUserIdDto) {
const { hp } = param;
return hp + '유저 아이디 찾기';
}
async findUserCheck(body: FindUserCheckDto) {
const { hp, id } = body;
return {
hp,
id,
ex: '변경 존재 아이디 확인',
};
}
async passwordChange(body: PasswordChangeDto) {
try {
const { id, pwd } = body;
return {
id,
pwd,
ex: '비밀번호 변경',
};
} catch (error) {
console.log(error);
}
}
}
728x90
반응형
'Nest.js' 카테고리의 다른 글
Nest Swagger 2. Swagger 사용 방법 [ 비밀번호 생성 ] (0) | 2022.04.20 |
---|---|
Nest Swagger 1. 사용 방법 [ 세팅, summary 생성, property 생성 ] (0) | 2022.04.20 |
Nest Mongoose _id 인덱스 속성 명칭 변경 방법 (0) | 2022.04.19 |
Nest Mongoose DB 스키마(DB 모델) 생성 (0) | 2022.04.19 |
Nest Mongoose 연결 (0) | 2022.04.19 |