이번 포스팅은 '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 |
뷰에서 받으실 때도 동일한 방법으로 받으시면 됩니다.
소스를 토막내어 올리면 어디가 어딘지 모르실 것 같아, 추가하고 추가하는 방식으로 소스 첨부했습니다.
소스가 다소 길어보이더라도 위에서부터 천천히 읽어주세요:)
도움되셨길 바라며
오늘도 감사합니다 :)
'Programming' 카테고리의 다른 글
[Java의 정석] 제 1장 자바를 시작하기 전에 (0) | 2017.06.20 |
---|---|
[MySQL] MySQL 에서 서브쿼리(SubQuery) 쓰는 방법 (0) | 2017.06.19 |
[Node.js] node js 에서 쿠키를 저장하고, 가져오는 방법 (0) | 2017.05.30 |
[Node.js] Mac 환경에서 Node.js 설치하는 방법 (0) | 2017.05.22 |
[MongoDB] Mac os에 MongoDB 설치하는 방법 (0) | 2017.05.18 |
댓글