컴퓨터 프로그래밍/Node.js

[Node.js] 페이지네이션

한33 2023. 11. 8. 23:33
app.get('/list/1', async (요청, 응답) => {
  let result = await db.collection('post').find().limit(5).toArray()

  응답.render('list.ejs', { 글목록: result })
})

app.get('/list/2', async (요청, 응답) => {
  let result = await db.collection('post').find().skip(5).limit(5).toArray()

  응답.render('list.ejs', { 글목록: result })
})

app.get('/list/3', async (요청, 응답) => {
  let result = await db.collection('post').find().skip(10).limit(5).toArray()

  응답.render('list.ejs', { 글목록: result })
})

 

 

위처럼 나눠서 해야됐을 부분을 URL Parameters 를 이용해서

 

app.get('/list/:number', async (요청, 응답) => {
  let result = await db.collection('post').find().skip((요청.params.number -1) * 5 ).limit(5).toArray()

  응답.render('list.ejs', { 글목록: result })
})

 

다음과 같이 만들었다.

 

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

 

다음 버튼도 만들어주었고

 

app.get('/list/next/:id', async (요청, 응답) => {
  let result = await db.collection('post').find({_id : {$gt : new ObjectId (요청.params.id) }}).limit(5).toArray()

  응답.render('list.ejs', { 글목록: result })
})

 

다음 버튼이 눌렸을 때 동작하게 될 서버 코드도 작성했다.