2021_05_24
TIL - Node.js에서 MySQL 사용하기
1. Node.js에서 MySQL 사용하기
오늘은 쇼핑몰 Cmarket 애플리케이션의 데이터베이스를 구축했다. 이전에는filesystem을 이용해서 필요한 데이터를 저장했었는데 이번엔 데이터베이스를 이용해서 구현했다.
크게 세 가지 기능을 구현했다.
- 해당 유저가 작성한 모든 주문을 가져오는 함수를 작성하자.
- 해당 유저의 주문 요청을 데이터베이스에 생성하는 함수를 작성하자.
- 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에 대해 공부한다.
오늘은 여기까지~!
Author And Source
이 문제에 관하여(2021_05_24), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jiwon22/20210524저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)