티스토리 뷰

RDS에 로그인이 되었다 가정하고 필요한 것( Amazon RDS 엔드포인트. 계정명, 비밀번호, 연결할 MySQL DB이름)

 

1. 해당 프로젝트에 express, mysql2라이브러리 설치하기 

# yarn으로 프로젝트를 초기화합니다.
yarn init -y

# express와 mysql 드라이버를 설치합니다.
yarn add express mysql2

 

 

2. app.js에서 mysql 정보를 입력해 줍니다. (여기선 AWS RDS 정보사용)

// app.js

import express from 'express';
import mysql from 'mysql2'; //MySQL 데이터베이스를 Node.js에서 사용할 수 있게 도와주는 라이브러리

const connect = mysql.createConnection({
  host: , // AWS RDS 엔드포인트 (AWS가 아니라면 데이터베이스 드라이버가 접속할 데이터베이스의 주소)
  user: 'root', // AWS RDS 계정 명
  password: 'aaaa4321', // AWS RDS 비밀번호
  database: 'express_db', // 연결할 MySQL DB 이름 ( 데이터베이스에 연결할 DB가 존재해야함 )
  port : 3306, // 기본값이 3306이라 설정하지 않아도 되지만 만약 변경이 있었다면 설정을 해주어야함
})
const app = express();
const PORT = 3000;

app.use(express.json());

app.listen(PORT, () => {
  console.log(PORT, '포트로 서버가 열렸어요!');
});

 

 

3. 해당 경로를 호출하면 테이블이 생성될수 있도록 작성해줍니다.

app.post("/api/tables", async (req, res, next) => {
  const { tableName } = req.body;

  await connect.promise().query( // Raw Query를 사용하기 위한 형식. query()안에 쿼리문 작성.
    `CREATE TABLE ${tableName}(
            id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(20) NOT NULL,
            createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
        )`
  );
  return res.status(201).json({ message: "테이블 생성에 성공하였습니다." });
});

 

4. 테이블 조회하는 경로 작성하기

app.get("/api/tables", async (req, res, next) => {
  const [tableList] = await connect.promise().query(`show tables`);
  console.log(tableList); // [ { Tables_in_express_db: 'test' } ]
  const tableNames = tableList.map((table) => Object.values(table)[0]); 
  // Object.values(table)[0] 으로 설정하는 이유
  /*
    [0]으로 설정하지 않게 되면 
    {"tableNames": [["test"]]}
    2차배열의 형태로 결과가 나오게 된다.
    [0]으로 설정한다면
    {"tableNames": ["test"]}
    이렇게 배열 바로 앞에 위치하는 1차배열의 형태인걸 볼수 있습니다.
    
    이 이유는 Object.value()가 배열형태로 값을 꺼내오기 때문에 배열의 0번째라고 지정을 해주어야합니다.
  */
  return res.status(201).json({ tableNames: tableNames });
});

처음 데이터 베이스를 생성할 때 저렇게 한칸씩만 띄우면 스키마에 들어가는 내용들이 구분이 될까 하면서

서버를 켜주고 경로를 작성하니

테이블 생성

잘들어갑니다.

 

 

4. 테이블 데이터 삽입하는 경로 작성하기

/** 데이터 삽입 API **/
app.post("/api/tables/:tableName/items", async (req, res, next) => {
  const { tableName } = req.params;
  const { name } = req.body;

  await connect.promise().query(`
        INSERT INTO ${tableName} (name)
        VALUES ('${name}')`);
  return res.status(201).json({ message: "데이터 생성에 성공하였습니다." });
});

데이터 추가

잘 들어가는걸 확인 할 수 있습니다.

데이터 베이스를 설정 할 때 의 정보들만 잘 저장해 뒀다면 크게 어려움없이 할수 있는것 같습니다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함