본문 바로가기

개발/개발의 ㄱ

[NestJs] query, param type전환에 따른 DTO validation

반응형

get 요청시 query, param은 무조건 string으로 값이 온다.

NestJs에서 권장한 dto는 class-validator을 통해 유효성 검사가 가능한데, IsNumber이 먹히지 않는 이슈가 있다.

어떻게 할까?

 

1) enableImplicitConversion: true

// main.ts

...
  app.useGlobalPipes(
    new ValidationPipe({
      transform: true,
      transformOptions: { enableImplicitConversion: true },
    })
  );
...

transform true와 함께 enableImplicitConversion: true을 설정해, 암묵적 변환을 실행한다.

 

2) @Type(() => Number)

import {
  IsNumber,
} from "class-validator";
import { Type } from "class-transformer";

export class DTO {
  @Type(() => Number)
  @IsNumber()
  readonly index: number;

  @Type(() => Number)
  @IsNumber()
  readonly index_: number;

  @Type(() => Number)
  @IsNumber()
  readonly index__: number;
}

필자의 경우 상세 케이스 추적이 어렵기보단, 필요한 순간에만 사용하길 희망한다.

이에 class-transformer의 Type을 통해 타입 변경을 해준다.

 

 

이상입니다

*코드 깨지면 아래 링크 참조해주세요

https://medium.com/%EB%8F%84%EA%B9%A8%EB%B9%84-%EC%9D%B4%EC%95%BC%EA%B8%B0/nestjs-query-param-type%EC%A0%84%ED%99%98%EC%97%90-%EB%94%B0%EB%A5%B8-dto-validation-d9981b6c6f50