본문 바로가기
Back-end/DB

MySQL과 Node.js(express)연동하기

by 개미는뚠뚠딴 2020. 12. 6.
반응형

오늘은 MySQL과 Node.js의 연동 방법에 대해서 알아보았다. 

node.js를 이용해 프로젝트를 먼저 생성하고 

npm install express mysql

npm install 명령어로 express와 mysql 모듈을 설치해준다. 

그리고 프로젝트에 .sql 파일을 생성하고 테이블을 생성해준다. 

로컬의 MySQL에도 접속하여 똑같이 테이블을 설계해준다.

DROP DATABASE IF EXISTS chat;
CREATE DATABASE chat;
USE chat;

CREATE TABLE `users` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(255)
  );

CREATE TABLE `messages` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `text` varchar(255),
  `roomname` varchar(255)
  );

ALTER TABLE `messages` ADD userId int;
ALTER TABLE `messages` ADD FOREIGN KEY (`userId`) REFERENCES `users` (`id`);

 

그리고 db폴더를 생성에 안에 index.js를 생성해준다.

const mysql = require("mysql");
// export PASSWORD=your_password_here -> 전역에 패스워드 설정해주기
// export 변수명 = 값

const password = process.env.PASSWORD;

const host = "localhost";

module.exports = {
  connection: mysql.createConnection({
    host: host,
    user: "root",
    password: password,
    database: "chat",
  }),
};

이렇게 패스워드를 전역에 설정해주면 깃에 올리지 않고도 패스워드를 넣을 수 있다.  
터미널에 반드시 export DATABASE_SPRINT_PASSWORD=your_password_here 이 문장을 실행해준다. 
(터미널마다 설정하는 것이므로 터미널이 꺼지면 재설정이 필요하다.)

 

다음은 routing을 해주겠다. 

app.js 파일을 생성해주고 다음과 같이 작성해준다.

const express = require("express");
const mysql = require("mysql");
const db = require("./db/index.js");

const app = express();

app.set('port', 3000);

app.get("/messages", (req, res) => {
    db.connection.query( `SELECT * FROM messages`, (err, results)=>{
        if(err)
          console.log(err);
        res.send(results);
    });
});

app.get("/users", (req, res) => {
    db.connection.query( `SELECT * FROM users`, (err, results)=>{
        if(err)
          console.log(err);
        res.send(results);
    });
});

app.listen(app.get("port"));
console.log("Listening on", app.get("port"));

query() 안에 다양한 쿼리문을 넣어서 원하는 데이터를 뽑아낼 수 있다.

query() 함수로 쿼리를 실행시키는데 첫번째 인자로는 쿼리문이 오고 두 번째 인자로는 쿼리문을 실행시킨 결과가 콜백 함수 안으로 들어오게 된다. 이때 콜백 함수의 첫 번째 인자는 에러이고 두 번째 인자가 쿼리문의 결과가 된다.

테스트를 위해 미리 데이터를 넣어주었다. (query()안에 INSERT INTO를 사용해서 값을 넣을 수도 있다.)

messages 테이블 구조와 데이터
users 테이블 구조와 데이터

그리고 node app.js로 실행을 시켜주었다.
(아니면 scripts에 등록시켜서 node명령어를 넣어 둘 수 있다. 나는 빠른 디버깅을 위해 nodemon을 설치했다. )

npm start로 실행 가능
nodemon 실행 후 messages 경로로 get요청시 콘솔 화면

그리고 데이터 요청은 Postman을 이용해서 실행했다.

/messages 경로로 get요청 postmen 실행 화면
users 경로로 get요청시 콘솔 화면
/users 경로로 get요청 postman 화면

 

이렇게 간단히 node.js(express)를 이용해서 로컬 db MySQL과 연동하는 방법에 대해서 알아보았다.

 

반응형

댓글