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

노정우
도깨비 이야기
Jul 31, 2023

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을 통해 타입 변경을 해준다.

이상입니다

--

--