[express + mysql]

Calvin Park·2022년 7월 28일
0

express

목록 보기
3/3
post-custom-banner

오늘의 주제는 Express에다가 mysql을 연결 드가자~!

기본적인 코드

mysql파일 코드이다.

const mysql = require("mysql");//npm i mysql
const sql = require("./script");//스크립트 파일은 mysql script내용들이 들어가 있다.

//pool 생성 (상세 설명은 생략하겠다...)
const pool = mysql.createPool({
  connectionLimit: process.env.MYSQL_LIMIT,
  host: process.env.MYSQL_HOST,
  port: process.env.MYSQL_PORT,
  user: process.env.MYSQL_USER_NAME,
  password: process.env.MYSQL_PASSWORD,
  database: process.env.MYSQL_DB,
});

//쿼리 실행을 비동기로 처리하기 위해서 async로 함수를 만들고, 쿼리 실행 결과를 전달하기 위해서 promise를 사용.
const query = async (alias, values) => {
  return new Promise((resolve, reject) =>
  //scrupt에 있는 쿼리에 할당된 오브젝트 키명을 파라미터로 전달 하면 pool.query()함수에서 첫 번째 파라미터(sql[alias])로 script파일에서 전달된 키명에 해당하는 쿼리를 가져온다. 
    pool.query(sql[alias], values, (error, result) => {
      if (error) {
        console.log(error);
        reject({
          error,
        });
      } else resolve(result);
    })
  );
};
module.exports = {
  query,
};

script파일을 작성해 보자

const getAllPostsQuery = `SELECT
                        *
                  from
                        POSTS`;

const insertPostQuery = `INSERT
                              INTO
                        POSTS
                              SET ?`;

module.exports = { getAllPostsQuery, insertPostQuery };

? <- 물음표는 사용자가 전송한 데이터가 요브젝트형인 경우에는 각 key를 컬럼명, value을 컬럼에 들어갈 값으로 변환하게 된다.

{
	"user":"유저"
    "password":"비밀번호"
    "title":"제목"
    "content":"내용"
}
INSERT 
	INTO
POSTS
	SET
USER = "유저", password = "비밀번호",title ="제목", contnet = "내용"    

요렇게 들어간다.
그리고
controller.js

const mysql = require("/mysql") //상위 mysql 폴더 파일을 지정
const getAllPosts = asyncWrapper(async (req, res, next) => {
  const allPosts = await mysql.query("getAllPostsQuery");
  console.log(allPosts);
  if (!allPosts) {
    return next(res.status(200).json({ msg: "게시글이 없습니다." }));
  }
  res.status(200).json({ allPosts });
});

const createPost = asyncWrapper(async (req, res, next) => {
  let { user, title, password, content } = req.body;
  if (!user) {
    return next(res.status(400).json({ msg: "사용자를 입력해주세요." }));
  } else if (!title) {
    return next(res.status(400).json({ msg: "사용자를 입력해주세요." }));
  } else if (!password) {
    return next(res.status(400).json({ msg: "사용자를 입력해주세요." }));
  } else if (!content) {
    return next(res.status(400).json({ msg: "사용자를 입력해주세요." }));
  }
  const result = await mysql.query("insertPostQuery", req.body);
  res.status(200).json({ result });
});

요렇게 하면 mysql이 조회되고 생성되는 것을 볼수가 있다.

profile
Personal Velog Note
post-custom-banner

0개의 댓글