MySQL(with express)

BenKim·2020년 7월 25일
0

MySQL은 관계형 데이터베이스 관리 시스템(relational database management system, RDBMS)
으로서 정보를 저장하는 애플리케이션이다.
정보를 파일에 저장하는것도 좋지만 데이터베이스에 저장하므로써 파일에 저장하는 것보다 더 많은 기능을 사용할 수 있다.

express 기본세팅

$mkdir express-mysql-example // 연습을 위한 적당한 폴더를 만든다.
$cd express-mysql-example // 폴더에 들어가고
$npm init -y // 기본설정으로 package.json을 만든다.
$npm install express mysql --save // express와 mysql을 설치하고 package.json에 저장한다.

//루트디텍토리에 index.js를 생성하고 콘솔로그를 담아둔다.
console.log('Hello world')
//node index 를 터미널에 입력해 콘솔 내용이 출력되는걸 확인한다.

mysql로 데이터베이스 및 테이블 삽입

//터미널에서 mysql로 접속한다.
mysql -u root (계정과 비번을 만들지 않았을때)
mysql -u root -p(루트 비번이 있을때)   //종료하는방법 exit;

//테스트용 데이터베이스,테이블을 삽입한다
CREATE DATABASE IF NOT EXISTS my_db; // my_db라는 데이터베이스가 없으면 생성한다.

USE my_db; // 해당 데이터베이스로 들어간다.

CREATE TABLE IF NOT EXISTS Users ( //user라는 테이블이 없으면 생성한다.
  id VARCHAR(45) NOT NULL, // 칼럽의 타입들을 지정해준다.
  password VARCHAR(45) NOT NULL,
  PRIMARY KEY (id)); 

INSERT INTO Users (id, password) //user의 id와 password 칼럼에 값을 넣는다.
VALUES (3, '1234'); // user에 id칼럼값 3, 'password'값 '1234' 로 값을 추가했다.

SELECT password FROM Users WHERE id='3'; // 조건에 맞는 password를 user에서 가져온다.

node.js와 MySQL의 연결

연결부분

//mysql.createConnection이라는 메소드안에 객체형식으로 데이터베이스 정보
//( host, user, password,database를 입력하고 실행시키면 해당 데이터베이스와 
node.js환경이 연결된다.

//아래코드는 연결과 관련된 데이터만 있는 특정파일에 넣어둔다. config/database.js
const mysql = require("mysql");
const password = process.env.DATABASE_SPRINT_PASSWORD;
// process.env로 시작하는 모든 변수들은 환경 변수(environmental variables)입니다.
// 환경 변수는 터미널에서 다음 명령을 이용하여 설정할 수 있습니다.
// export DATABASE_SPRINT_PASSWORD=your_password_here
const host = "localhost";

let connection = mysql.createConnection({
  host,
  user: "root",
  password, 
  // password는 환경변수로 지정되어있어서 터미널을 통해 입력해줄 수 있다. 터미널이 재시작되면 초기화된다.
  database: "chat" //연결할 데이터베이스 이름
});
connection.connect(); //연결실행
module.exports = connection;// 데이터베이스 연결을 만들고, 연결 객체를 export 했다.

라우팅부분

//index.js를 아래와같이 변경한다.
const express    = require('express'); //express 호출
const mysql      = require('mysql'); // mysql 호출
const connection   = require('./config/database.js');// 연결부분 호출

const app = express(); // app이라는 express서버 생성

//connection이용해서 데이터베이스에 요청해보기
connection.query('SELECT * from Users', (error, rows, fields) => {
  if (error) throw error;
  console.log('User info is: ', rows);
  });
  // 터미널에서 node index를 해주면 console.log로 sql문의 결과를 출력하게 된다.
  //connection.query의 콜백함수의 인자는 에러와 결과값이 들어간다. 세번째 인자는 user의info를 보여주는데 이유는 잘 모르겠다.
connection.end();

//express 라우팅결과로 데이터베이스 값 내보내는 부분
app.set('port', process.env.PORT || 3000);

app.get('/', (req, res) => {
  res.send('Root');
});

app.get('/users', (req, res) => {
  connection.query('SELECT * from Users', (error, rows) => {
    if (error) throw error;
    console.log('User info is: ', rows);
    res.send(rows);
  });
});

app.listen(app.get('port'), () => {
  console.log('Express server listening on port ' + app.get('port'));
});

//만약 ‘ER_NOT_SUPPORTED_AUTH_MODE’ 에러가 발생하면 아래 sql을 실행하고 다시 접속해보자.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '< MySQL password >';
FLUSH PRIVILEGES;

참고 : https://poiemaweb.com/nodejs-mysql

profile
연습과 자신감

0개의 댓글