나의 발자취
SQLite NodeJS 모듈 이용해서 게시판 구현하기 (2) /list 본문
app.get("/list")를 수정해줄것이다.
db.serialize(() => {
db.run(create_sql);
});
app.get("/list", (req, res) => {
let sql = `select id, title, content, author, createdAt, count from posts order by 1 desc`;
db.all(sql, [], (err, rows) => {
if (err) {
res.status(500).send("Internal Server Error");
} else {
console.log(JSON.stringify(rows));
res.render("list", { posts: rows });
}
});
});
그러면 다시 Localhost:3000/list로 접속했을 때 생성한 DB가 목록에 뜨는것을 볼 수 있다.
list 페이지 안에 페이지 넣기
// list
app.get("/list", (req, res) => {
let page = req.query.page ? parseInt(req.query.page) : 1;
const limit = 5;
const offset = (page - 1) * limit;
let sql = `select id, title, content, author, createdAt, count from posts order by 1 desc limit ? offset ?`;
db.all(sql, [limit, offset], (err, rows) => {
if (err) {
res.status(500).send("Internal Server Error");
} else {
db.get(`select count(1) as count from posts`, (err, row) => {
if (err) {
res.status(500).send("Internal Server Error");
} else {
const total = row.count;
const totalPage = Math.ceil(total / limit);
res.render("list", {
posts: rows,
currentPage: page,
totalPages: totalPage,
});
}
});
}
});
});
여기서, 변수 설명.
const limit = 5;
const offset = (page - 1) * limit;
* limit: 한 페이지안에 들어갈 게시글 수(최대 5개로 설정함)
* offset: 한 페이지 별로 쿼리를 작업할 때, 행을 시작하는 지점
예를 들어, 총 7개의 게시글이 존재한다고 친다. limit = 5일 경우, 1번~5번 게시글은 1페이지, 6~7번 게시글은 2페이지가 될 것이다.
쿼리 가지고 올 땐
1페이지에서는
select * from posts
limit 5 offset 0
2페이지에서는
select * from posts
limit 5 offset 5
(offset: 5 다음의, 즉 6부터 가지고 오게 된다.)
또한 조금 아래 내려가서,
let sql = `select id, title, content, author, createdAt, count from posts order by 1 desc limit ? offset ?`;
db.all(sql, [limit, offset], (err, rows) => {
limit ? 은 db.all() 파라미터의 [limit] 안에 들어가게 되고, offset ? 은 db.all() 파라미터의 [offset] 안에 들어가게 된다.
'Backend' 카테고리의 다른 글
자바스크립트 객체 리터럴 res.render("habit_record_list", { records: rows }); (1) | 2024.10.02 |
---|---|
SQLite NodeJS 모듈 이용해서 게시판 구현하기 (3) /login (0) | 2024.09.30 |
SQLite NodeJS 모듈 이용해서 게시판 구현하기 (1) 초기설정 (0) | 2024.09.27 |
[node.js] HTML 템플릿 엔진 PUG, HandleBars, EJS (1) | 2024.09.26 |
[node.js]express, nodemon 이용하기 (1) | 2024.09.26 |
Comments