본문 바로가기
Programming

[Node.js] node.js 에서 db에 접속하는 방법 (My SQL)

by SyWORLD 2017. 6. 11.
반응형





이번 포스팅은 'node.js 로 database 에 접속하는 방법' 입니다.

(프로젝트를 Node.js Express Project 로 생성했다는 가정하에 쓰도록하겠습니다.)




1. 외부모듈 기본설정

일단 node.js 를 실행하기위한 기본세팅을 합니다.

(express 설정과 port 설정, http 설정)


package.json

1
2
3
4
"dependencies" : {
    "express" : "*",
"ejs" : "*",
    "mysql" : "*"
// "*" 로 버전을 표기하시면, 가장 최근버전으로 다운받아집니다.
cs


package 설정을 하시면, Run as - npm install 을 하셔야합니다.


app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
var express = require('express');
var mysql = require('mysql'); // MySQL 연결을 위한 세팅
 
var app = express();
var server = require('http').createServer(app);
var port = process.env.PORT || 3000;
 
 
 
 
server.listen(port,function(){
    console.log("Connect Server : " + port);
});
cs




2. mysql 연결 설정


app.js (9번째 줄 ~ 14번째 줄)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var express = require('express');
var mysql = require('mysql'); // MySQL 연결을 위한 세팅
 
var app = express();
var server = require('http').createServer(app);
var port = process.env.PORT || 3000;
 
 
var client = mysql.createConnection({
    hostname : "127.0.0.1:3306"// 접속하려는 DB의 호스트 이름
    user : "root"// 계정 이름 
    password : "root"// 계정 비밀번호 (이 부분은 설정하신 것에 따라 다릅니다.)
    database : "test" // 스키마 이름 ( 이 부분도 설정하신 이름에 따라 다릅니다.)
});
 
 
server.listen(port,function(){
    console.log("Connect Server : " + port);
});
cs



3. 라우터 설정 및 MySQL 쿼리문 작성


app.js (21번째 줄 ~ 39번째 줄)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var express = require('express');
var mysql = require('mysql'); // MySQL 연결을 위한 세팅
 
var app = express();
var server = require('http').createServer(app);
var port = process.env.PORT || 3000;
 
 
var client = mysql.createConnection({
    hostname : "127.0.0.1:3306"// 접속하려는 DB의 호스트 이름
    user : "root"// 계정 이름 
    password : "root"// 계정 비밀번호 (이 부분은 설정하신 것에 따라 다릅니다.)
    database : "test" // 스키마 이름 ( 이 부분도 설정하신 이름에 따라 다릅니다.)
});
 
 
server.listen(port,function(){
    console.log("Connect Server : " + port);
});
 
app.set('views', __dirname + '/views'); // views 폴더 경로 설정
app.set('view engine''ejs'); 
 
app.get('/test',function(req,res){
 
var userName = 'name1';
 
client.query('SELECT * FROM users WHERE name = ?',userName,function(err,result1){
    if(err) throw err; // 에러가 났을 때 throw 하기 위함입니다.
 
    var userId = result1[0].id; // DB에서 나온 결과 중에 0번째 row의 id 컬럼의 값을 가져와 설정합니다.
    console.log("테스트 : " + userId); // 콘솔에 테스트
}
 
res.render('test',{
        userId : userId
    });
 
});
cs


35번째 줄을 보시면, 위에서 views 폴더 설정과 ejs 설정을 해두었기 때문에, 제목만 써두어도 render 됩니다.

즉, /views/test.ejs 인 셈이죠!


test 라는 뷰에 userId 라는 key값으로 value값에 DB에서 조회한 users 테이블의 name이  name1인  데이터의 id 컬럼 값을 넣어 보내줍니다.



4. ejs 에서 DB 조회한 값 받기


 test.ejs

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Node js 와 MySQL 연동하기</h2>
<p>Id 는 : <%= userId %></p>
</body>
</html>
cs


EL태그의 표기법과 동일하게 받아주시면 됩니다.



** 참고 **


DB 에서 더 많은 값을 조회해야 할 때, 쿼리문을 여러 개 쓰셔야 할 때는 이렇게 하시면 됩니다.


app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var express = require('express');
var mysql = require('mysql'); // MySQL 연결을 위한 세팅
 
var app = express();
var server = require('http').createServer(app);
var port = process.env.PORT || 3000;
 
 
var client = mysql.createConnection({
    hostname : "127.0.0.1:3306"// 접속하려는 DB의 호스트 이름
    user : "root"// 계정 이름 
    password : "root"// 계정 비밀번호 (이 부분은 설정하신 것에 따라 다릅니다.)
    database : "test" // 스키마 이름 ( 이 부분도 설정하신 이름에 따라 다릅니다.)
});
 
 
server.listen(port,function(){
    console.log("Connect Server : " + port);
});
 
app.set('views', __dirname + '/views'); // views 폴더 경로 설정
app.set('view engine''ejs'); 
 
app.get('/test',function(req,res){
 
var userName = 'name1';
var owner = 'name2';
 
    client.query('SELECT * FROM users WHERE name = ?',userName,function(err,result1){
    if(err) throw err; // 에러가 났을 때 throw 하기 위함입니다.
 
    var userId = result1[0].id; // DB에서 나온 결과 중에 0번째 row의 id 컬럼의 값을 가져와 설정합니다.
    console.log('테스트 : ' + userId); // 콘솔에 테스트
        
        client.query('SELECT * FROM cars WHERE owner = ?',owner,function(err,result2){
            var carName = result2[0].car_name; // DB에서 나온 결과 중에 0번째 row의 car_name 컬럼의 값을 가져와 설정합니다.
            console.log('테스트 : ' + carName); // 콘솔에 테스트    
        }
    }
    
res.render('test',{
        userId : userId,
        carName : carName
    });
 
});
 
 
cs


처음에 썼던 쿼리문 안에 또 다른 쿼리문을 넣고, render 에서 데이터 보낼 때, 같은 방식으로 추가하여 보내주시면 됩니다. 


test.ejs

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Node js 와 MySQL 연동하기</h2>
<p>Id 는 : <%= userId %></p>
<p>carName 은 : <%= carName %></p>
</body>
</html>
cs


뷰에서 받으실 때도 동일한 방법으로 받으시면 됩니다.



소스를 토막내어 올리면 어디가 어딘지 모르실 것 같아, 추가하고 추가하는 방식으로 소스 첨부했습니다.

소스가 다소 길어보이더라도 위에서부터 천천히 읽어주세요:)


도움되셨길 바라며

오늘도 감사합니다 :)









반응형

댓글