레시피 사이트를 프로젝트 팀과 구현중이다.
pagination를 sequelize로 하니 매우 간단했다
const pageNum = req.query.page;
let offset = 0;
if (pageNum > 1) {
offset = 20 * (pageNum - 1);
}
쿼리 파라미터를 받아두었다가,
위와같이 offset을 정해주면 페이지별 20개씩 데이터를 클라이언트에 보내줄 수 있다.
req.query.page > 1 이상이라면 1페이지(데이터가 20개) 이상 존재한다는 뜻이고,
const allContent = await content.findAndCountAll({
where: { categoryId: categoryValue.dataValues.id },
attributes: [
'id',
'title',
'thumbnail_url',
'createdAt',
'rate',
'views',
],
offset: offset,
limit: 20,
});
여기서
offset
만큼은 데이터를 find 하지 않겠다.
limit
최대 20개만 뽑겠다.
를 설정해주었다.
그리고, 클라이언트에도 총 페이지가 몇개인지 알려주는 것이 좋다.
그래야 필요한 만큼 페이지 버튼을 만들어 놓으니까...
return res.status(200).send({
data: {
recipes: [searchResults.rows],
allPages: allPages,
},
});
이런식으로 데이터를 내보낼 때, allPage에 담아서 클라이언트에서 페이지를 몇개 만들어야하는지 알려주었다.