데이터베이스에서 데이터를 가져오기 전에 가져올 데이터의 크기를 정해서 가져와야 DB 부하, 서버 부하, 네트워크 트래픽 부하 등을 방지할 수 있다.
- 페이징(Paging) : 이렇게 일정한 크기로 데이터를 나누는 것
- 페이지(Page) : 일정한 크기를 가진 데이터
- 페이지네이션(Pagination) : 이 페이지들을 이동하는 것
페이지네이션 정보
// 페이지네이션 정보
const result = {
pageCounterNum, // 페이지 크기
pageNum, // 현재 페이지 번호
pnStart, // 현재 페이지의 페이지네이션 시작 번호
pnEnd, // 현재 페이지 페이지네이션 마지막 번호
pnTotal, // 전체 마지막 페이지 번호
contents: contentQueryResult, // 게시판 컨텐츠 배열
};
예시
// 전체 게시글 개수 가져오기
var query = "Select count(*) as TotalCount from ??";
var table = ["users"];
query = mysql.format(query, table);
connection.query(query, function(err, rows) {
if(err){
return err;
}else{
//store Total count in variable
let totalCount = rows[0].TotalCount
// 현재 페이지, 페이지 크기 설정
if(req.body.start == '' || req.body.limit == ''){
let startNum = 0;
let LimitNum = 10;
}
else{
//parse int Convert String to number
let startNum = parseInt(req.body.start);
let LimitNum = parseInt(req.body.limit);
}
}
// 페이지 크기만큼 게시글 데이터 가져오기
var query = "Select * from ?? ORDER BY created_at DESC limit ? OFFSET ?";
var table = ["users",LimitNum,startNum];
query = mysql.format(query, table);
connection.query(query, function(err, rest) {
if(err){
res.json(err);
}
else{
// json으로 데이터 내보내기
res.json("Total Count": totalCount , "data":rest)
}
출처
https://medium.com/@salonimalhotra1ind/pagination-in-node-express-mysql-eda52bf605b7
'개발 > Node.js' 카테고리의 다른 글
node 미들웨어 에러처리 (0) | 2023.09.15 |
---|---|
Node 프레임워크 14가지 (0) | 2023.08.18 |
Json Web Token 이란? (0) | 2023.08.03 |
[Express] 2. Express + typescript + MVC 패턴 서버 만들기 (0) | 2023.08.02 |
[Express] 1. Express + MVC 패턴 서버 만들기 (0) | 2023.07.12 |