생각기록

2022-12-01 MYSQL nodejs와 연결 본문

SeSAC 풀스택/MYSQL

2022-12-01 MYSQL nodejs와 연결

끼록관 2022. 11. 30. 15:38

노드 js와 연결하는 법

1. npm install mysql;

깔아줍니다.

 

2.const mysql = require('mysql');

모듈을 가져옵니다.

 

3.연결 기능을 넣어줄 객체 = mysql.createConnection({ })

.createConnection 이 함수의 옵션으로는

host, user, password, database가 있다.

mysql 에서는 root 최고 권위 유저는 외부 속이 허용되지 않기 때문에!

user: root 로 하면 실행이 되지 않는다.

=> 새로운 계정을 생성해서 접속해야 한다!!

 

4. 새로운 계정과 비밀번호 설정 하는 방법

# mysql 사용자 추가하기
CREATE USER 'user'@'%' IDENTIFIED BY '비밀번호';


# DB 권한 부여 (모든 DB에 접근 가능하도록)
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;


# 현재 사용중인 MySQL의 캐시를 지우고 새로운 설정을 적용하기 위해 사용

> 실행
FLUSH PRIVILEGES;

 

select host, user, plugin, authentication_string from mysql.user;

> 잘 만들어졌는지 확인

 

# mysql 계정 비밀번호를 바꾸고 싶을 때
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY '비밀번호';

 

설정하고 다시 js파일로 돌아가서

 

5. 연결 객체의 query함수

cnn.query('select * from user', (err, result) =>{   //유저에 대한 것을 가져오겟다
    if (err) throw err; //에러가 뭐라하는지 띄움
    console.log(result); //에러가 발생하지 않으면~ 결과 값이 잘 담긴다
});

'select * from user', = ' 유저 라는 데이터베이스를 선택 ' 이라는 SQL문을 실행하면,

query 는 (err, result ) 라는 얘들을 콜벡 한다.

  • err 객체는 err가 뜨면 뭐라하는지 띄워주고
  • result는 정상 실행시 cosonle.log 로 띄웠다.

6. 연결이 성공하면

select가 객체 배열로 나온다.

 


mysql와 express 서버 연결

ejs 설치 안했..ㅠ

npm install express, ejs 해주고

 

필요한 객체와 모듈을 다 셋팅하고

1. mysql객체에 연결 셋팅 

 

2. app.get 화면에 보여줄 것 셋팅

> 'select * from user' //user 데이터베이스를 가져오겟다

res.render ('index', { rows : result }); 

여기서 정보를 받을 때 key, value 표기 하는데

  • key: 원하는 이름 
  • value : 위에서 받은 reuslt 인자값

즉 이 정보를 index.ejs 파일을 랜더하며 준다.

 

3. ejs파일에서는 해당 값을 이용하기 위해

<%=rows[i]%> 라는 ejs문으로 rows라는 key 사용하여 데이터값을 불러옴 

//index.js 파일

const express = require('express');
const app = express();
const port=8080;
const mysql = require('mysql');

app.set('view engine', 'ejs');

const cnn = mysql.createConnection({
    host: 'localhost',       
    user: 'user',            
    password: '0530arum',
    database: 'ar_test'
});

app.get('/', (req,res)=>{
    cnn.query('select * from user', (err, result) =>{   //유저에 대한 것을 가져오겟다
        if (err) throw err; 
        console.log(result);
        res.render('index',{ rows : result }); //key는 원하는 이름 : 값은 위에서 받은 result
    });
   
});

app.listen(port, ()=>{
    console.log('open', port);
})
//index.ejs 파일
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    안녕
    <% for(let i = 0; i<rows.length; i++) { %>
        <div>
            <span><%=rows[i].id%></span> 
            <span><%=rows[i].name%></span> 
        </div>
    <% } %>
</body>
</html>