최근 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 });
});
});
'DB, ORM > 🧊 MySQL' 카테고리의 다른 글
MySQL 쓰면서 하지 말아야 할 것 17가지 (펌) (1) | 2020.10.09 |
---|---|
MySQL 개체 훑어보기 : ALTER, 인덱스, 뷰, Stored Procedure, 트리거 (0) | 2020.07.31 |
MySQL shell TABLE 관련 설정 (0) | 2020.07.29 |
MySQL에서 SQL 파일 사용하기(source), SQL 내보내기 (0) | 2020.07.29 |
mysql 패키지) connection pool의 필요성 및 생성 (0) | 2020.07.29 |