나의 발자취

SQLite NodeJS 모듈 이용해서 게시판 구현하기 (2) /list 본문

Backend

SQLite NodeJS 모듈 이용해서 게시판 구현하기 (2) /list

달모드 2024. 9. 27. 16:50

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] 안에 들어가게 된다.

728x90
반응형
Comments