2021_05_24

TIL - Node.js에서 MySQL 사용하기

1. Node.js에서 MySQL 사용하기

오늘은 쇼핑몰 Cmarket 애플리케이션의 데이터베이스를 구축했다. 이전에는filesystem을 이용해서 필요한 데이터를 저장했었는데 이번엔 데이터베이스를 이용해서 구현했다.

크게 세 가지 기능을 구현했다.

  1. 해당 유저가 작성한 모든 주문을 가져오는 함수를 작성하자.
  2. 해당 유저의 주문 요청을 데이터베이스에 생성하는 함수를 작성하자.
  3. Cmarket의 모든 상품을 가져오는 함수를 작성하자.

나는 3번을 가장 먼저 구현했다.

(3) Cmarket의 모든 상품을 가져오는 함수를 작성하자.

get: (callback) => {
  let sql = `select * from items`
  db.query(sql, (err, results, fields) => {
    callback(err, results)
  })
}

(1) 해당 유저가 작성한 모든 주문을 가져오는 함수를 작성하자.

let sql = `
        select orders.id, items.image, items.name, items.price, order_items.order_quantity, orders.total_price
        from order_items
        join items on items.id = order_items.item_id 
        join orders on orders.id = order_items.order_id
        where orders.user_id = ${userId}`
      db.query(sql, (err, results) => {
        if(err) throw err;
        callback(err, results);
      })

특별히 어려운 부분은 없었지만 orders, items, order_items에 있는 정보들을 가져오기 위해 join을 했어야 하는 점에서 조금 헷갈렸다.

order_items 테이블이 orders 테이블과 items 테이블의 조인테이블 이었다.

(2) 해당 유저의 주문 요청을 데이터베이스에 생성하는 함수를 작성하자.

post: (userId, orders, totalPrice, callback) => {
  //orders, order_items 테이블에 정보를 저장해야 한다.
      let sql_orders = `insert into orders (user_id, total_price) values (${userId}, ${totalPrice})`; 
      db.query(sql_orders, (err, results) => {
        if(err) throw err;
        var params = orders.map((el) => { // order_items 테이블에 여러 개의 레코드를 테이블에 한번에 저장하기 위함이다.
          return [results.insertId, el.itemId, el.quantity];
        })
        let sql_order_items = `insert into order_items(order_id, item_id, order_quantity) values ?`
        db.query(sql_order_items, [params], (err, results) => { // sql문 ? 자리에 params가 들어간다.
          if(err) throw err;
          callback(err, results);
        })
      })  
    }

orders.map 안에서 return을 할 때 results.insertId를 사용했다.
results를 콘솔로 찍어보면 그 안에 insertId가 있다. 이를 이용해서 order_items에 foreign key로 삽입했다.




이번시간에는 데이터베이스 Cmarket을 구현했다.
다음시간에는 ORM에 대해 공부한다.
오늘은 여기까지~!

좋은 웹페이지 즐겨찾기