NestJS - 16. 파라메터 Null 체크 - ValidationPipe
Nestjs에서 기본적으로 제공하는 ValidationPipe를 이용하면 요청 Parameter의 유효성을 쉽게 체크하고 처리할 수 있습니다.
예를 들면 필수 입력 값의 경우 @IsNotEmpty를 사용하는 것만으로 유효성 체크가 끝이 납니다.
사용자 등록시 아이디와 패스워드를 필수 값으로 처리하는 방법에 대해 알아보겠습니다.
이전 예제에서 사용자 등록시 Input Parameter는 아래의 UserDTO를 사용하였습니다.
src/auth/dto/user.dto.ts
export class UserDTO {
username: string;
password: string;
}
이 경우에 username을 빈값으로 보내게 되어도 다음과 같이 회원 가입이 됩니다.
db에는 다음과 같이 id 3번 값이 공백으로 들어가게 됩니다.
공백이 입력되는 것을 막는 ValidationPipe를 사용해 보겠습니다.
우선 class-validator 패키지를 설치합니다.
npm i --save class-validator
UserDTO에서 "@IsNotEmpty()" 데코레이터를 추가합니다.
src/auth/dto/user.dto.ts
import { IsNotEmpty } from "class-validator";
export class UserDTO {
@IsNotEmpty()
username: string;
@IsNotEmpty()
password: string;
}
회원가입 라우팅 메소드에 "@UsePipes(ValidationPipe)"를 추가합니다.
src/auth/auth.controller.ts
import { Body, Controller, Get, Post, Req, Res, UseGuards, UsePipes, ValidationPipe } from "@nestjs/common";
...
@Post('/register')
@UsePipes(ValidationPipe)
async registerAccount(@Req() req: Request, @Body() userDTO: UserDTO): Promise<any> {
return await this.authService.registerUser(userDTO);
}
...
이제 다시 위와 동일하게 username을 공백으로 API를 호출합니다.
* 이때 Validation 체크가 되지 않을 경우 "npm run build"를 한번 실행 후에 하시면 됩니다.
결과는 400 에러가 나오고 , username은 반드시 입력해야 한다는 메시지가 나옵니다.
class-validator의 데코레이터는 다음 사이트에가면 확인하실 수 있습니다.
https://github.com/typestack/class-validator#manual-validation
GitHub - typestack/class-validator: Decorator-based property validation for classes.
Decorator-based property validation for classes. Contribute to typestack/class-validator development by creating an account on GitHub.
github.com