개발아 담하자

[Node.js] MySQL과 연동하기 본문

🛠 web

[Node.js] MySQL과 연동하기

choidam 2020. 7. 2. 02:44

선수환경으로 MySQL WorkBench 에서 data 를 insert 되어 있어야 한다.

 

sample mysql data

$ mysql.server start

mysql server 를 키는 것도 잊지 말자❗️

 


$ npm i mysql

내 디렉토리로 들어가서 MySQL 을 설치한다.

 

const mysql = require('mysql')

상단에 mysql library 를 불러와준다.

 

const connection = mysql.createConnection({
  host: 'localhost',
  user: [username],
  password: [pw],
  database: [db name]
})

connection 정보에 제대로 된 정보를 입력하면 연결할 준비 끝❗️

 

 

전체 데이터 리스트 불러오기

router.get('/', function(req, res, next) {
  var queryString = "SELECT * FROM user"

  connection.query(queryString, (err,rows,fields) => {
    res.json(rows)
  })

});

select * from user

postman에 확인한 결과 전체 userlist가 잘 반환된다.

 

 

원하는 데이터만 불러오기

router.get('/:id', function(req,res,next) {
  var queryString = "SELECT * FROM user WHERE id = ?"
  var userId = req.params.id

  connection.query(queryString, [userId], (err,rows,fields) => {
    if(err){
      console.log(err)
      res.sendStatus(500)
      return
    }
    res.json(rows)
  })
})

select * from user where id = ?

원하는 특정 user도 제대로 반환된다.

 

 

데이터를 View에 Rendering 하기

router.get('/list', catchErrors(async (req,res,next)=> {

  var queryString = "SELECT * FROM user"

  connection.query(queryString, (err,rows,fields)=>{
    if(err){
      throw err
    } 
    console.log(rows)
    res.render('user/list', {userlist: rows, title: 'UserListTitle'})
  })
}))
extends ../layout

block content
    h1.custom=title
    br
    table
        tbody
            each i, idx in userlist
                tr
                    td=i.id
                    td=i.first_name
                    td=i.last_name

 

전체 유저 리스트가 뷰에서 출력됨을 확인할 수 있다.

 

 

특정 id의 user만 조회하는 경우 (데이터 1행만 조회) 는 rows[0] 만 입력하면 된다.

router.get('/:id', function(req,res,next) {
  var queryString = "SELECT * FROM user WHERE id = ?"
  var userId = req.params.id

  connection.query(queryString, [userId], (err,rows,fields) => {
    if(err){
      console.log(err)
      res.sendStatus(500)
      return
    }
    console.log(rows)
    res.render('user/userdetail', {title: 'UserDetail', user: rows[0]})
  })

})
extends ../layout

block content
    h1= title
    h3= user.id
    h3= user.first_name
    h3= user.last_name