본문 바로가기
경일/nodejs

[nodejs] todoApp 만들기 feat. mySQL

by dev_kong 2022. 2. 4.
728x90
728x90

0. 목차

1. 개요

2. 기본세팅

3. CRUD

4. 후기

1. 개요

https://kong-dev.tistory.com/122

 

[nodejs]todoApp 만들기(express, nunjucks, mongodb,body-parser)

0. 목차 1. 개요 2. 기본세팅 3. HTML & CSS 4. CRUD 5. 정리 1. 개요 가장 기본이 되는 CRUD 만들어볼거다. 사용할 라이브러리는, express, nunjucks, body-parser(exprss 내장 객체 대체가능)이며, 데이터 베이..

kong-dev.tistory.com

이거 만든거.

mongoDB로 만들었던거 mySQL로 다시 만들어봄.

똑같은 부분은 제외하고 다른부분만 올릴거임..ㅇㅇ

2. 기본 세팅

2-1. mySQL

https://kong-dev.tistory.com/124

 

[mySQL] mySQL 기본 사용법, CRUD(Create, Read, Update, Delete)

0.목차 1. 개요 2. CREATE DATABASE 3. CREATE TABLE 4. CRUD 1. 개요 https://kong-dev.tistory.com/122?category=998366 [nodejs]todoApp 만들기(express, nunjucks, mongodb,body-parser) 0. 목차 1. 개요 2...

kong-dev.tistory.com

스키마랑 테이블은 위 링크에서 만든걸 사용하기 때문에,

따로 설명 안할거임.

mySQL connect 는 

https://kong-dev.tistory.com/125

 

[nodejs] node에서 mySQL 연결(Error: connect ECONNREFUSED ::1:3306)

매우 간단하다. 우선 npm 을 통해 mysql 라이브러리를 다운 받아주자. $ npm init -y $ npm install mysql 다운 받은 라이브러리를 require를 통해 땡겨오고, const mysql = require('mysql') 이제 연결설정을 만..

kong-dev.tistory.com

이렇게 하면 됨

3. CRUD

3-1. Create

app.post('/create', (req, res) => {
  db.query(
    `INSERT INTO todo(title, dueDate) VALUES('${req.body.todo}', '${req.body.dueDate}')`,
    (error, result) => {
      if (error) return console.log(error);

      console.log('저장 완료');
      res.redirect('http://localhost:8000/list');
    }
  );
});

에.. 뭐 간단하다.

오히려 mongoDB보다 쉬운 듯.

mongoDB는 하나하나 가 뭔가 다 method로 이뤄진 느낌인데,

이건 query method하나에

그냥 쿼리문을 때려박으면 돼서 오히려 이게 더 편한거 같기도 하다.

 

호옥시 여기 있는 쿼리문들이 기억이 안난다면..?

https://kong-dev.tistory.com/124

 

[mySQL] mySQL 기본 사용법, CRUD(Create, Read, Update, Delete)

0.목차 1. 개요 2. CREATE DATABASE 3. CREATE TABLE 4. CRUD 1. 개요 https://kong-dev.tistory.com/122?category=998366 [nodejs]todoApp 만들기(express, nunjucks, mongodb,body-parser) 0. 목차 1. 개요 2...

kong-dev.tistory.com

와.. 내 블로그 무슨 다이소 같당 헤헿

 

저저 req.body.title 하고 req.body.dueDate 저부분 스트링이니까 quote 안써도 되겟지?

했는데 아님 quote 로 감싸줘야됨 

안감싸주면 에러남.

3-2. Read

app.get('/list', (req, res) => {
  db.query(`SELECT * FROM todo`, (error, result) => {
    if (error) return console.log(error);

    res.render('list.html', { postList: result });
  });
});

음 짜릿하게 편하다.

아 그리고 mysql 라이브러리는 query의 결과를 배열로 리턴해주기때문에,

굳이 mongoDB 처럼 toArray() 같은짓 안해줘도 된다.

3-3. Delete

app.post('/delete', (req, res) => {
  db.query(`DELETE FROM todo WHERE _id='${req.body._id}'`, (error, result) => {
    if (error) return console.log(error);

    res.redirect('http://localhost:8000/list');
  });
});

3-4. Update

app.get('/edit/:id', (req, res) => {
  const _id = Number(req.params.id);

  db.query(`SELECT * FROM todo WHERE _id='${_id}'`, (error, result) => {
    if (error) return console.log(error);

    console.log(result);
    res.render('edit.html', { udtPost: result });
  });
});

app.post('/edit', (req, res) => {
  const todo = req.body.todo;
  const dueDate = req.body.dueDate;
  const _id = Number(req.body._id);

  db.query(
    `UPDATE todo 
    SET title = '${todo}', dueDate = '${dueDate}' 
    WHERE _id = '${_id}'`,
    (error, result) => {
      if (error) return console.log(error);

      res.redirect('http://localhost:8000/list');
    }
  );
});

 

귀찮아서 코드만 넣은게 아니라

진짜 쓸게 없음.

여기까지 왔으면 delete 와 update는 매우 당연한거임 ㅇㅇ

4. 후기

어려울줄 알았는데 생각보다 쉬웠다.

할만했음.

다만 좀 불-편 했던게,

async / await 을쓰고 싶은데

db.query method가 프로미스 인스턴스를 리턴하지 않기 때문에,

async / await 을 쓰는게 불가능하다.

흐으음 이걸 조금 손보는게 내일 목표임

728x90
728x90

댓글