본문으로 바로가기

mysql + express 세팅 및 간단한 쿼리 작성

category DB, ORM/🧊 MySQL 2020. 7. 30. 05:27

최근 Mysql + node(Koa)를 통해 DB와 통신을 하는 코드를 보았다.

 

필자가 본 코드의 일부는 다음과 같다. sequelize가 아니라 직접 query를 작성하는 것!

sequelize와 같은 ORM보다 쿼리를 직접 작성하는 것이 더 좋을 것아서 나도 이를 따라 보려고 한다.

(앞으로도 이런 방식을 계속 사용할 것 같다! mongoDB에서 점차 SQL쪽으로 옮겨가보려고 노력 중이다)

result = await pool.query(

    `SELECT COUNT(*) today FROM Topics WHERE created > CURDATE() AND boardDomain = ?`
    [domain]

)

 

DB 설정 및 연결, pomisify를 통해 비동기 함수 가공

 

pool을 작성하는 방식으로 가보겠습니다.

const mysql = require("mysql");
const dotenv = require("dotenv").config();
const util = require("util");

const { DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE } = process.env;

// database
const pool = mysql.createPool({
  connectionLimit: 5000,
  host: DB_HOST,
  user: DB_USER,
  password: DB_PASSWORD,
  database: DB_DATABASE,
  multipleStatements: true,
});

pool.getConnection((err, connection) => {
  if (err) {
    switch (err.code) {
      case "PROTOCOL_CONNECTION_LOST":
        console.error("Database connection was closed.");
        break;
      case "ER_CON_COUNT_ERROR":
        console.error("Database has too many connections.");
        break;
      case "ECONNREFUSED":
        console.error("Database connection was refused.");
        break;
    }
  }
  if (connection) {
    console.log("✔ db connection done!");
    return connection.release();
  }
});

pool.query = util.promisify(pool.query);
// util.promisify으로 감싸기
// pool.query.then(data => ...)

pool.getConnection = util.promisify(pool.getConnection);
// util.promisify으로 감싸기
// pool.getConnection.then(data => ...)

 

 

 

DB, Table 생성은 건너 뛰겠습니다. 직접 heidiSQL이든 workbench든 켜서 쿼리를 작성하면 됩니다.

 

/이나 /add에 접속하면 todo 테이블에서 모든 행을 가져오도록 sql을 작성하고 쿼리를 날린 후 결과물을 view로 처리하도록 넘겨주는 코드를 작성해보았습니다.

 

쿼리를 통해 받은 내용은 다음과 같이 배열로 넘어 옵니다.

[ RowDataPacket { id: 1, TEXT: 'fisrt one' } ]
globalRouter.get(["/", "/add"], (req, res) => {
  const sql = "SELECT * FROM todo";
  pool.query(sql).then((data) => {
    res.render("index", { data });
  });
});

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체