๐ custom pipe์์ Nan์ด ๋ฐ์์ง๋ ๋ฌธ์ - boostcampwm-2024/web17-juchumjuchum GitHub Wiki
๋ถ์ผ | ์์ฑ์ | ์์ฑ์ผ |
---|---|---|
BE | ๊น๋ฏผ์ | 24๋ 11์ 14์ผ |
custom pipe์์ Nan์ด ๋ฐ์์ง๋ ๋ฌธ์
์ด๋ค ๋ฌธ์ ์ธ๊ฐ์?
@Query('latestChatId', NumberOrUndefinedPipe) latestChatId?: number,
์์ ๊ฐ์ด ์ซ์์ undefined๋ง ๋ฐ๊ธฐ ์ํด ์ปค์คํ pipe๋ฅผ ๋ง๋ค์๋ค.
@Injectable()
export class NumberOrUndefinedPipe implements PipeTransform {
transform(value: string): number | undefined {
if (value === undefined) {
return value;
}
const number = Number(value);
if (isNaN(number)) {
throw new BadRequestException('Value should be a number or undefined');
}
return number;
}
}
pipe์ฝ๋์์ number์ undefined๊ฐ ์๋๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋๋ก ํ์ง๋ง undefined์ผ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋์๋ค.
ํด๋น ๋ฌธ์ ๊ฐ ์ ๋ฐ์ํ๋์?
@Query('latestChatId', NumberOrUndefinedPipe) latestChatId?: number,
pipe๋ฅผ ์ค์ ํ ๋ณ์์ ํ์ ์ด number์ผ ๋ undefined๊ฐ Nan์ผ๋ก ์ ๋ฌ๋๋ ๊ฒ์ด ๋ฌธ์ ์๋ค. Nan โ undefined์ด๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ if ๋ฌธ์ ํต๊ณผํ๊ฒ ๋๋ค.
์ด๋ ๋ฌธ์์ด์ ๊ฒฝ์ฐ๋ Nan์ด ๋๊ธฐ ๋๋ฌธ์ undefined์ ๋ฌธ์์ด์ ๊ตฌ๋ถํ ์ ์๋ ์ํฉ์ด๋ค.
app.useGlobalPipes(new ValidationPipe({ transform: true }));
์ ์ด๋ ๊ฒ ๋ฐ๋๋์ง ์กฐ์ฌํด๋ณธ ๊ฒฐ๊ณผ ๊ธ๋ก๋ฒ ValidationPipe์ transform์ true๋ก ํ๋ฉด ํ์ ์ ๋ง๊ฒ ์๋์ผ๋ก ๋ณ๊ฒฝํ๋ ์์ ์ด ์งํ๋๋ค.(๋จ ํด๋์ค์ผ ๊ฒฝ์ฐ ๋ด๋ถ ๊ฐ์ ํ์ ์ ๋ฐ๊พธ์ง ์์) ๋ฐ๋ผ์ transform์ false๋ก ์ค์ ํ๋ฉด ๋์ง๋ง ๋ค๋ฅธ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ ํ์ง๋ฅผ ์ฐพ์์ผ ํ๋ค.
custom pipe์์ Nan์ด ๋ฐ์์ง๋ ๋ฌธ์
๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
์ฟผ๋ฆฌ์ ๋ค์ด๊ฐ๋ ๊ฐ๋ค์ ํด๋์ค๋ฅผ ๋ฌถ๊ณ ๋์ class-tranform์ด ์ ๊ณตํ๋ ๊ฒ ์ค ํ๋์ธ @IsOptional์ ํตํด์ undefined๋ ๋ฐ์ ์ ์๋๋กํ๋ค.
export class ChatScrollRequest {
@IsString()
readonly stockId: string;
@IsOptional()
@IsNumber()
readonly latestChatId?: number;
@IsOptional()
@IsNumber()
readonly pageSize?: number;
}