본문 바로가기
TIL

Nest) request Query nullable 명시했으나 오류가 생기는 문제

by 해룸 2024. 4. 18.
  @ApiOperation({ summary: '리뷰 조회' })
  @Render('detailContent')
  @Get()
  async getCReivew(
    @Param('webContentsId', ParseIntPipe) webContentsId: number,
    @Query('page', ParseIntPipe) page?: number,
    @Query('order') order?: string,
    @Query('option') option?: string,
  ) {
    const result = await this.reviewService.getCReviews(
      webContentsId,
      page,
      order,
      option,
    );

    const { content, reviewList, totalPages } = result;

    return { content, reviewList, totalPages, page, order, option };
  }

문제가 생긴 곳은 리뷰조회 api인데, query로 page, order option 을 받아 페이지네이션을 하는 파트다.

Querystring이 전부 들어오지 않을때에는 option = p, page = 1로 기본 페이지를 주고싶었는데 테스트를 해보니 세개의 query중 하나라도 줘야지 작동했다. 그때는 별 문제 아니겠지 하고 넘겼는데 프론트 페이지를 작성하다보니 문제가 생겼다. 기본 페이지를 줘야하는데 query가 제공되지않으면 리뷰조회가 안되는 똑같은 오류가 생겨 다시 코드를 파헤쳐 봤다.

 

테스트를 진행하면서 오류를 알아봤는데, 셋 중 하나라도 있으면 작동되는게 아니라 page query가 필요했다.

그리고 서비스 코드를 다시 보다가 문제가 뭔지 알게 되었다.

 const reviewList = await this.platformReviewsRepository.find({
          where: { webContentId },
          order: { likeCount: 'desc' },
          take: 10,
          skip: (page - 1) * 10,
        });

이렇게 page를 반드시 사용하게 되는 코드가 있었다. 이러면 page에 nullable로 표시해둬도 당연히 안되지..!

 

@ApiOperation({ summary: '리뷰 조회' })
  @Render('detailContent')
  @Get()
  async getCReivew(
    @Param('webContentsId', ParseIntPipe) webContentsId: number,
    @Query('page', new DefaultValuePipe(1), ParseIntPipe) page?: number,
    @Query('order') order?: string,
    @Query('option') option?: string,
  ) {
    const result = await this.reviewService.getCReviews(
      webContentsId,
      page,
      order,
      option,
    );

    const { content, reviewList, totalPages } = result;

    return { content, reviewList, totalPages, page, order, option };
  }

new DefaultValuePipe()를 사용해 해결했다.

page에 값이 들어오지 않는다면 page = 1의 값을 넣어주게 된다.

 

 

 

'TIL' 카테고리의 다른 글

redis cloud 이용해 조회수 기능 구현하기  (0) 2024.04.30
GCP Compute Engine 이용해 서버 배포하기  (0) 2024.04.16
힙 정렬  (0) 2024.04.12
이모지 문자 mySql에 저장하기  (0) 2024.04.12
TIL #34) Nest로 S3 이용하기  (0) 2024.03.25