ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vapor] Pagination 사용해보기
    Programing/Vapor 2020. 6. 19. 16:33

    안녕하세요~! 5anniversary입니다!!!!

     

    다들 서버에서 데이터들을 받아오는 경우에 어떻게 받아오시나요??

     

    기본적으로 간단한 데이터들의 경우에는 그냥 받아오는 경우가 많은데요~~!

     

    게시글이나 100개 혹은 그 이상의 데이터들의 경우에는 Pagenation을 통해서 원하는 데이터들만을 뽑아오는게 좋다고 생각합니다.

     

    이런경우에 사용할 Pagination은 어떻게 만드는지에 대해서 알아볼게요!!

     

    저는 Querybuilder를 extension으로 새로운 query(page)로 만들어 처리를 합니다

     

    한 번 코드로 알아보자면

        public func query(page: Int) -> Self {
            
            let aPage = page < 1 ? 1 : page // page를 받아와
            let start = (aPage - 1) * pageCount // 미리 정해둔 pageCount와 곱해 시작되는 row를 지정합니다.
            let end = start + pageCount // 끝나는 row도 지정해야겠죠??
            let ran: Range = start..<end // ran라는 range를 정해줍니다.
            return self.range(ran) // 쿼리중에 해당되는 range만을 반환해줍니다.
        }
    

     

    이후에 이 쿼리문을 사용하는 코드를 알아보자면

     

        func ArticleListHandler(_ req: Request) throws -> Future<Response> {
            return Article
                .query(on: req)
                .query(page: req.page)
                .all()
                .flatMap({ (article) in
                    return try ResponseJSON<[Article]>(data: article).encode(for: req)
                })
        }
    

     

    와 같이 작성을 해주신다면 

     

    http://localhost:8000/api?page=1

     

    를 get 메소드로 날려주신다면?? 

     

    원하는 row갯수로 나눠져 나오게 됩니다!!

     

    물론 page의 값을 계속해서 올리며 요청을 해줘야겠죠??

     

    댓글

Designed by Tistory.