[Node+MongoDB]글목록 여러 페이지로 나누기(페이지네이션)

김나나·2024년 8월 28일

Node.js

목록 보기
20/50
  1. 페이지 이동 버튼 만들고
  2. 1번 버튼 누르면 1~5번 글을 보여줄 수 있도록
    (/list/1 페이지)
  3. 2번 버튼 누르면 6~10번 글을 보여줄 수 있도록
    (/list/2 페이지)
  4. 3번 버튼 누르면 11~15번 글을 보여줄 수 있도록
    (/list/3 페이지)

  1. server.js에서 앞에 작성했던 list의 get코드를 가져오되, 우선은 URL 파라미터를 쓰지 않고 하나씩 작성해주었다.

    여기서 사용된 limit()는 위에서부터 가져올 수를 넣어주면 된다.

테스트해보니 5개만 출력된다.

  1. 다음인 list/2페이지에는 앞의 5개를 자르고 이후 5개부터 출력해줘야하기 때문에

    .skip(5)을 함께 써줘야한다.


이번에도 6번째부터 10번째까지 잘 출력된다.


일단 이렇게 쓰면 1,2,3페이지 전부 잘 출력이 되기는 하나..
동일한 코드가 반복되는 것이 싫으니

  1. URL 파라미터를 사용하여 축약해준다.
    현재 skip에 들어가야하는 숫자는
    (URL 파라미터에 입력한 수 -1) * 5를 해줘야하기 때문에 skip((요청.params.id - 1) * 5)를 써주면 되겠다.

참고로 .skip()의 성능이 좋지 않기 때문에 너무 많이 skip하는 것을 불가능하게 막는 것이 좋다고 함


skip의 성능문제로 다른 페이지네이션 방법을 찾는 경우 .find()에 조건을 넣는 식으로 활용해서 아래처럼 코드를 짜면 된다.

마지막 게시물의 id를 구하기 위해 list.ejs로 돌아가서

<a href="/list/next/<%= 글목록[글목록.length-1]._id %>">다음</a>

다음 버튼을 a태그로 만들어 마지막 게시글의 id를 가져온다.

이제 server.js로 다시 돌아가서 요청.params.id를 쓰면 간편하게 마지막 게시글의 id값을 넣어줄 수 있을 것..!

이렇게 하고 테스트를 해보면

잘 나온다~

profile
10분의 정리로 10시간을 아낄 수 있다는 마음으로 글을 작성하고 있습니다💕

0개의 댓글