-
Notifications
You must be signed in to change notification settings - Fork 3
๐ custom pipe์์ Nan์ด ๋ฐ์์ง๋ ๋ฌธ์
๋ถ์ผ | ์์ฑ์ | ์์ฑ์ผ |
---|---|---|
BE | ๊น๋ฏผ์ | 24๋ 11์ 14์ผ |
@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๋ก ์ค์ ํ๋ฉด ๋์ง๋ง ๋ค๋ฅธ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ ํ์ง๋ฅผ ์ฐพ์์ผ ํ๋ค.
์ฟผ๋ฆฌ์ ๋ค์ด๊ฐ๋ ๊ฐ๋ค์ ํด๋์ค๋ฅผ ๋ฌถ๊ณ ๋์ class-tranform์ด ์ ๊ณตํ๋ ๊ฒ ์ค ํ๋์ธ @IsOptional์ ํตํด์ undefined๋ ๋ฐ์ ์ ์๋๋กํ๋ค.
export class ChatScrollRequest {
@IsString()
readonly stockId: string;
@IsOptional()
@IsNumber()
readonly latestChatId?: number;
@IsOptional()
@IsNumber()
readonly pageSize?: number;
}
- ๐ฉ FE ๊ธฐ์ ์ ํ์ด์
- โจ ์ฐจํธ์ ๋ฐ์ํ ๊ตฌํ๊ณผ useRef ํ์ ๋ฌธ์
- ๐ฃ ๋ถ๋ชจ ์์์ ์ํ์ ๋ฐ๋ผ ์์ ์์๋ ์คํ์ผ ๋ณํ ๋ถ์ฌํ๊ธฐ
- ๐ zod ๋์ ํ๊ธฐ
- ๐ useInfiniteQuery๋ฅผ ์ฌ์ฉํ ๊ทธ๋ํ ๋ฌดํ์คํฌ๋กค ๊ตฌํ
- ๐ซ ์ฌ์ฉ์์ ์์ ๋ณํ ์๋ ๊ทธ๋ํ ์คํฌ๋กค ๊ตฌํํ๊ธฐ
- ๐งช ์๋ง์ ๊ทธ๋ํ ๋ฐ์ดํฐ ์์ฒญ์ ์ด๋ป๊ฒ ์ค์ผ๊น
- ๐ ๋คํฌ๋ชจ๋์์ ์๋ก๊ณ ์นจ ์ ๋ผ์ดํธ๋ชจ๋๊ฐ ์ ๊น ๋ณด์ด๋ ๋ฌธ์
- ๐ ์น์์ผ์ ์ฑํ ๋ฐ์ดํฐ์ REST API์ ์ฑํ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๊ธฐ
- ๐ก BE ๊ธฐ์ ์ ํ ์ด์
- โ๏ธ Node WebSocket ํ๊ณ ๋ค๊ธฐ
- โ๏ธ TypeORM Datasource mock ๋ง๋ค๊ธฐ
- โ๏ธ oauth ID range ๋ฌธ์
- ๐ custom pipe์์ Nan์ด ๋ฐ์์ง๋ ๋ฌธ์
- ๐ช nest Websocket์ ์ธ์ ์ด ์๋๋ค๊ณ ?
- ๐ด nginx websocket ์ฐ๊ฒฐ ์ ๋ฌธ์ ๋ฐ์
- ๐ WebPush ๊ตฌํ
- ๐ง ์ฐ์ ์์ ํ๋ก ์์ฒญ ์ ์ดํ๊ธฐ
- ๐ websocket์ด ๋ฆ๊ฒ ํ ๋น๋์ด ๋ฐ์๋๋ ๋ฌธ์
- ๐ฅณ typeorm์ ์ด์ฉํ FCM ์๋ฆผ ์๋น์ค
- ๐ฆ ๋ค์ค ์ ์ ๋์์ฑ ์ ์ด โ ์ฑ๊ธํค, ๋ฎคํ ์ค
- ๐ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๊ณตํ๊ธฐ์ํ ์ ๋ต
- ๐ ๏ธ ์ธํ๋ผ ๊ธฐ์ ์คํ ์ ํ ์ด์
- ๐ Ncloud ์ค์ ๊ณผ์
- ๐ ORM ๊ธฐ์ ์คํ ๋น๊ต
- ๐ค RabbitMQ๋ก ๋ถ์ฐ ์๋ฒ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ถ๋ฐฐํ๊ธฐ
- ๐ข private DB ์๋ฒ์ ์ ์ํ์ง ๋ชปํ๋ ํ์
- ๐ 1์ฃผ์ฐจ ๋ฐํ
- ๐ 2์ฃผ์ฐจ ๋ฐํ
- ๐ 3์ฃผ์ฐจ ๋ฐํ
- ๐ 4์ฃผ์ฐจ ๋ฐํ
- ๐ 5์ฃผ์ฐจ ๋ฐํ
- ๐ ์ต์ข ๋ฐํ