TypeORM Pagination - Repository.find()

createQueryBuilder가 아닌 find() 함수를 사용할 때 Pagination

userRepository.find({ 
    skip: 0, // 
    take: 10 
})
  • skip : Is the offset or first page to start from. This is 0 indexed.
    시작 인덱스 지정 (0부터 시작)
  • take : Is the number of items to have per page.
    페이지 당 갯수 지정

products.controller.ts

@Get()
  getAll(@Query() query): Promise<ProductsOutput> {
    return this.productService.getAll(query.page, query.pageSize);
  }

@Query() 데코레이터를 이용해 Get request의 매개변수를 받은 후 Service로 전달
(이는 Get만 사용 가능하므로 추후에 다른 타입 알아볼 것)


products.service.ts

async getAll(page, pageSize): Promise<ProductsOutput> {
    try {
      console.log(page);
      console.log(pageSize);
      // throw new error();
      return {
        ok: true,
        data: await this.products.find({
          relations: ['category'],
          skip: (page - 1) * pageSize,
          take: pageSize,
        }),
      };
    } catch (e) {
      return {
        ok: false,
        error: e,
      };
    }
  }
  • skip : (page-1) * pageSize
  • take : pageSize

http://localhost:3000/product?page=1&pageSize=10 요청 시,
product의 index 0번부터 10번까지 조회

참고 출처 :
https://m.blog.naver.com/sssang97/221940724682
https://blog.8bitzen.com/posts/28-06-2019-typeorm-pagination
https://typeorm.io/#/select-query-builder/using-pagination

좋은 웹페이지 즐겨찾기