본문 바로가기

Backend/Node.js

Node.js MySQL 연동 (Express)

Node.js에서 MySQL을 연동해볼게요.

연동하고 select, insert, update, delete 쿼리까지 실행시켜 볼거에요.

연동하고 사용하는 것 자체는 매우 간단해요.

우선, mysql2 모듈을 설치해줍니다.

 

npm i mysql2

pool.js

const mysql = require('mysql2/promise')

const pool = mysql.createPool({
  host: 'localhost',
  port: 3306,
  user: 'demouser',
  password: 'demo12#$',
  database: 'demo_db',
  connectionLimit: 10
})

module.exports = pool

router

쿼리를 어떻게 사용하는지 볼 수 있도록 아주 간단하게 CRUD 기능(select, insert, update, delete)을 작성했어요.

실제로 query 메소드에서 리턴한 data 전체를 한 번 찍어보고 비즈니스 로직을 작성하는 게 좋아요.

async, await로 구현한 경우 query 호출 부분은 꼭 try 로 감싸줘야 에러가 발생하였을 때 오류 응답 처리할 수 있어요.

 

var express = require('express')
var router = express.Router()
const pool = require('../database/pool')

router.get('/:boardId', async (req, res, next) => {
  const { boardId } = req.params
  try {
    const data = await pool.query('select board_id, title, content from board where board_id = ?', [boardId])
    return res.json(data[0])
  } catch (err) {
    return res.status(500).json(err)
  }
})

router.get('/', async (req, res, next) => {
  const { page, size } = req.query
  try {
    const data = await pool.query('select board_id, title from board limit ?, ?', [Number(page), Number(size)])
    return res.json(data[0])
  } catch (err) {
    return res.status(500).json(err)
  }
})

router.post('/', async (req, res, next) => {
  const { title, content } = req.body
  try {
    const data = await pool.query('insert into board set ?', { title: title, content: content })
    return res.json(data[0])
  } catch (err) {
    return res.status(500).json(err)
  }
})

router.patch('/:boardId', async (req, res, next) => {
  const { boardId } = req.params
  const { title, content } = req.body
  try {
    const data = await pool.query('update board set title = ?, content = ? where board_id = ?', [title, content, boardId])
    return res.json(data[0])
  } catch (err) {
    return res.status(500).json(err)
  }
})

router.delete('/:boardId', async (req, res, next) => {
  const { boardId } = req.params
  try {
    const data = await pool.query('delete from board where board_id = ?', [boardId])
    return res.json(data[0])
  } catch (err) {
    return res.status(500).json(err)
  }
})

module.exports = router

 

Node에서 mysql2 모듈을 사용하면 연동 자체는 아주 간단하고 쉬워요.

간단한 비즈니스에서 가볍게 사용하기 매우 매우 좋습니다.

 

위의 코드를 기반으로 조금이나마 Node의 소스 구조를 잡아보려고 해요.

아래 링크를 참고해주세요.

https://gofnrk.tistory.com/65

 

Node 코딩 패턴 (Routes-Controllers-Services 구조)

서버 개발을 하다보면 코드의 특성별로 소스 파일을 나누게 되어있어요. Node도 마찬가지에요. 처음에 잘 구조를 잡아두면 유지보수할 때 큰 이득을 볼 수 있어요. 구조만 잘 잡아줘도 Node에서도 충분히 복잡한..

gofnrk.tistory.com