mysql DataBase를 이용해서 프론트와 통신할 때 프론트에서 원하는 정보를 요청받고 그에 해당하는 정보를 DB에서 꺼내서 응답으로 보내주는 통신을 해보았다.
const { DataSource } = require('typeorm');
const dataSource = new DataSource({
type: process.env.TYPEORM_CONNECTION,
host: process.env.TYPEORM_HOST,
port: process.env.TYPEORM_PORT,
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE
})
dataSource.initialize()
.then(() => {
console.log(`DataSource has been initialized!`)
})
.catch((error) => {
console.error("Error during Data Source initialization", error);
});
module.exports = dataSource;
먼저 database를 초기화 시켰다.
그리고 프론트에서 http통신이 들어오면 DB에서 해당 정보를 꺼내오는데,
SELECT
items.id as items_id,
items.name as items_name,
items.description,
items.price,
items.detail,
items.detail_image,
item_images.id as item_images_table_id,
item_images.name as item_images_table_name,
item_images.image_URL as item_images_table_image_URL,
item_images.item_id as item_images_table_item_id,
options_items.id as options_items_id,
options_items.item_id as options_items_item_id,
options_items.option_id,
options.id as options_table_id,
options.name as options_table_name,
options.price as options_table_price,
tags_items.id as tags_item_table_id,
tags_items.tag_id as tags_items_table_tag_id,
tags_items.item_id as tags_items_table_item_id,
tags.id as tags_id,
tags.name as tags_name
FROM items
INNER JOIN item_images
ON items.id = item_images.item_id
INNER JOIN options_items
ON items.id = options_items.item_id
INNER JOIN options
ON options_items.option_id = options.id
INNER JOIN tags_items
ON items.id = tags_items.item_id
INNER JOIN tags
ON tags_items.tag_id = tags.id
나의 경우는 item table과 item table을 참조하고 있는 table들을 inner join을 통해 그 안의 모든 column들을 뽑아내야 해서 총 다섯번을 join했다.
이렇게 뽑아낸 데이터를 service, controller, router를 통해 client에게 보내 준다.