Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- JavaScript
- node.js
- 코드잇
- CSS
- 중간이들
- Cookie
- aws
- 파이썬
- 꿀단집
- Python
- 코딩테스트준비
- 코딩테스트
- 방송대컴퓨터과학과
- SQL
- MySQL
- 데이터베이스시스템
- 방송대
- 항해99
- HTML
- 파이썬프로그래밍기초
- 개발자취업
- 자격증
- Git
- nestjs
- 유노코딩
- 엘리스sw트랙
- 99클럽
- redis
- 프로그래머스
- TiL
Archives
- Today
- Total
배꼽파지 않도록 잘 개발해요
NestJS에서 @Query 기본값 처리: DefaultValuePipe 본문
NestJS로 API를 개발하다보면 흔히 이런 상황을 마주하게 된다.
@Get('our-trip')
async getTrips(
@Query('pageNumber', ParseIntPipe) pageNumber: number,
) {
return this.tripService.findAll(pageNumber);
}
여기서 /out-trip 경로로 쿼리 파라미터 없이 요청을 보내면 어떤 일이 생길까?
바로 ParseIntPipe(undefined)가 실행되면서 에러가 난다.
왜 기본값(= 1)을 줘도 안 될까?
보통 TypeScript에서는 기본값을 이런식으로 지정한다.
@Query('pageNumber', ParseIntPipe) pageNumber: number = 1;
"쿼리가 없으면 그냥 1이 들어가겠지?"라고 생각했던 건 나의 큰 착각이었다.
NestJS는 그렇게 동작하지 않는다.
실행 순서는 다음과 같다.
- 쿼리 파라미터 파싱 → pageNumber = undefined
- ParseIntPipe 실행 → ParseIntPipe(undefined) → 에러
즉, NestJS의 파이프는 핸들러 실행 전에 동작하기 때문에, 파이프에서 이미 죽어서 오류가 난 경우,
함수 기본값 적용이 불가능하다.
그래서 TypeScript로 기본값을 적용했음에도 에러가 난 것이다.
DefaultValuePipe로 해결하기
그래서 가장 깔끔한 방법은 DefaultValuePipe를 함께 쓰는 것이다.
@Get('our-trip')
async getTrips(
@Query('pageNumber', new DefaultValuePipe(1), ParseIntPipe) pageNumber: number,
) {
return this.tripService.findAll(pageNumber);
}
실행 순서는 다음과 같다.
- 쿼리 파라미터 파싱 → pageNumber = undefined
- DefaultValuePipe(1) 실행 → "1"
- ParseIntPipe(1) 실행 → 1
- 함수 실행 시 pageNumber = 1
원하는 대로 기본값이 잘 들어간다.
이렇게 ParseIntPipe 이전에 DefaultValuePipe로 쿼리파라미터의 기본값 지정하는 건 해결했다.
하지만 이 API들에게는 더 무지막지한 문제가 있었다.
다음 글에 이어서 설명하겠다.
728x90
'BackEnd > Express / NestJS' 카테고리의 다른 글
[NestJS] NestJS @Res() 데코레이터를 사용할 때 응답 처리를 직접 제어해야함 (0) | 2024.09.13 |
---|---|
[NestJS] ejs 템플릿엔진 nodemailer로 발송시 CSS 미적용 오류 해결 (0) | 2024.08.30 |
[NestJS] @Inject 데코레이터를 사용할 때는 provide할 때 사용한 이름으로 주입받아야 함 (0) | 2024.08.26 |
[NestJS] service 클래스 내에서의 함수 분리의 중요성 (0) | 2024.08.26 |
[NestJS] Express의 Request 타입을 전역적으로 사용하는 방법 (0) | 2024.08.26 |