[NODEJS] mysql 라이브러리로 DB 가지고 오기(connection.query()만 따로 하는 wrapper 함수)

HyunJoo·2023년 2월 5일
0

nodejs

목록 보기
1/1

1. mysql 라이브러리로 DB 가지고 오기

import mysql from "mysql";

const dbconfig = {
  host     : 'localhost', // dummy 
  user     : 'me', // dummy 
  password : 'secret', // dummy 
  database : 'my_db' // dummy 
}

const connection = mysql.createConnection(dbconfig);

connection.connect(error => {
  if (error) throw error;
  console.log('Connected to the database.');
});

const query = "SELECT * FROM EMPLOYEE";
connection.query(query, (error, result, fields) => {
  if (error) throw error;
  console.log(result);
});

nodejs mysql 라이브러리를 이용하여 mysql DB에 접근할 수 있었다.

쿼리문을 통해 원하는 테이블의 자료를 가지고 올 수 있었다.

DB에 접근하여 쿼리문을 날리는 함수만 따로 만들고 싶었다.

2. connection.query()만 따로 하는 wrapper 함수 만들기

const query = "SELECT * FROM EMPLOYEE";  
const result = connection.query(query);
console.log(result.rows);

이렇게 접근하려고 하였지만 result.rows는 undefined로 result 안에 존재하지 않았다.

그래서 Promise를 이용한 방식으로 변경하였다.

const query = "SELECT * FROM EMPLOYEE";
function getUsers(sql) {
  return new Promise((resolve, reject) => {
    connection.query(sql, (error, results) => {
      if (error) {
        reject(error);
      } else {
        resolve(results);
      }
    });
  });
}

getUsers(query).then((result) => console.log(result));

3. route-method로 따로 빼기

// app.ts

app.get("/users", userRoutes.get);

// user.js

function getUsers(sql, values) {
  return new Promise((resolve, reject) => {
    connection.query(sql, values, (error, results) => {
      if (error) {
        reject(error);
      } else {
        resolve(results);
      }
    });
  });
}

export async function get(req, res) {
  const query = "SELECT * FROM EMPLOYEE";
  
  try {
    const result = await getUsers(query, values);
    res.status(200).json(result);
  } catch (error) {
    res.status(500).json(error);
  }
}

export default {
  get,
};

1. 쿼리문에 request로 받은 변수를 활용할 때

export async function get(req, res) {
	// 첫번째 방법
  const query1 = "SELECT * FROM EMPLOYEE WHERE EMPLOYEE_SEQ=?";
  const values = [1];

	// 두번째 방법
  const query2 = `SELECT * FROM EMPLOYEE WHERE EMPLOYEE_SEQ=${req.params.id}`;

  try {
    const result = await getUsers(query2, values);
    res.status(200).json(result);
  } catch (error) {
    res.status(500).json(error);
  }
}
profile
Front-End Engineer

0개의 댓글