-
NestJs Controller @Query Pipe 기록공부하기/node.js 2023. 2. 25. 01:38
컨트롤러의 엔드포인트에서 @Query 데코레이터를 사용하여 page, size, sort 변수값을 핸들링 하는 과정을 기록하는 포스팅
통과 기준
- page, size, sort 변수값을 입력하지 않을 경우 default value 리턴
- page, size, sort의 타입이 일치하지 않는 경우 에러 리턴
- page, size, sort 변수 중 일부를 제외한 요청에 정상 작동해야 한다
@Query() 변수에 기본값을 설정한 후 리턴
실험 코드
enum SORT_OPTION { ASC ='ASC', DESC = 'DESC' } @Get('find') async findAll( @Query('page') page: number = 1, @Query('size') size: number = 10, @Query( 'sort', ) sort: SORT_OPTION = SORT_OPTION.ASC, ) { return { page, size, sort }; }
테스트
1. page, size, sort 변수값을 입력하지 않을 경우 ==> 성공
응답
{
"page": 1,
"size": 10,
"sort": "ASC"
}
-> 변수 타입이 의도한대로 정확하게 리턴2. page, size, sort의 타입이 일치하지 않는 경우 ==> 실패응답{"page": "1","size": "10","sort": "ABC"}-> page, size의 데이터 타입이 string으로 리턴, sort는 enum 타입으로 ASC, DESC를 제외한 어떤 값도 통과되면 안되는데 ABC로 리턴 됌결과: page, size의 변수값을 입력 후 요청한 경우 의도하지 않은 응답을 받는다. 에러가 발생할 확률이 높다.@Query() 변수에 PipeLine을 추가한 후 기본값을 설정한 후 리턴
실험코드
@Get('find') async findAll( @Query('page', ParseIntPipe) page: number = 1, @Query('size', ParseIntPipe) size: number = 10, @Query('sort', new ParseEnumPipe(SORT_OPTION)) sort: SORT_OPTION = SORT_OPTION.ASC, ) { return { page, size, sort }; }
테스트
1. page, size, sort 변수값을 입력하지 않을 경우 ==> 실패
응답
{
"statusCode": 400,
"message": "Validation failed (enum string is expected)",
"error": "Bad Request"
}
2. page, size, sort의 타입이 일치하지 않는 경우 ==> 성공응답{"statusCode": 400,"message": "Validation failed (enum string is expected)","error": "Bad Request"}결과: page, size의 변수값을 입력 후 요청한 경우 의도하지 않은 응답을 받는다. 에러가 발생할 확률이 높다. -> 실패3. page, size, sort 변수 중 일부를 제외한 요청에 정상 작동해야 한다 ==> 실패
- sort = 'ASC'로 요청하면 page, size 변수의 pipeLine을 통과하지 못해 에러 발생
- page=1, size=10로 요청할 경우도 pipeLine에 의해 통과하지 못해 에러 발생
@Query() 변수에 PipeLine을 추가한 후 DefaultValuePipe 기본값을 설정한 후 리턴
실험코드
@Get('find') async findAll( @Query('page', new DefaultValuePipe(1), ParseIntPipe) page: number, @Query('size', new DefaultValuePipe(10), ParseIntPipe) size: number, @Query( 'sort', new DefaultValuePipe(SORT_OPTION.ASC), new ParseEnumPipe(SORT_OPTION), ) sort: SORT_OPTION, ) { return { page, size, sort }; }
테스트
1. page, size, sort 변수값을 입력하지 않을 경우
응답
{
"page": 1,
"size": 10,
"sort": "ASC"
}
-> default 값이 정상적으로 리턴 -> 성공
2. page, size, sort의 타입이 일치하지 않는 경우응답-> 에러를 리턴 -> 성공3. page, size, sort 변수 중 일부를 제외한 요청에 정상 작동해야 한다
-> 성공
결론
DefaultValuePipe, ParsePipe를 사용하여 queryString을 조작하자'공부하기 > node.js' 카테고리의 다른 글
NestJs Swagger 문서 만들기 (0) 2023.03.02 헥사고날 NestJs, TypeOrm dto type 리펙토링 (0) 2023.02.26 NestJs TypeOrm Exception (0) 2023.02.24 NestJs TypeOrm 엔티티 공통 컬럼 관리 (0) 2023.02.24 NestJs TypeOrm MySql Entity Name Error (0) 2023.02.24