세션을 사용하려면 먼저 npm 에서 session 모듈을 설치한다.


npm install express-session --save



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
49
50
51
var express = require('express');
var session = require('express-session'); //세션 모듈 가져오기
 
var app = express();
 
app.use(session({ //세션 모듈을 사용할수 있도록 호출
  secret:'123asd2312asd3',
  resave: false,
  saveUnunutualized:true //세션 ID를 실제로 세션을 사용하기전까지 발급하지 않게함
}));
 
app.get('/count',function(req,res){
 
  //count1 에 값 저장
  if(req.session.count1){
    req.session.count1++;  //세션 값 증가
  }else{
    req.session.count1=1;  //세션 값 세팅
  }
  //count2 에 값 저장
  if(req.session.count2){
    req.session.count2++;  //세션 값 증가
  }else{
    req.session.count2=1;  //세션 값 세팅
  }
  
  res.send('count1 : '+req.session.count1+'count2 : '+req.session.count2);
});
 
//count 1 세션 제거
app.get('/count1Close',function(req,res){
  delete req.session.count1;
  res.redirect('/count');
});
 
//count 2 세션 제거
app.get('/count2Close',function(req,res){
  delete req.session.count2;
  res.redirect('/count');
});
 
//세션 종료
app.get('/sessionClose',function(req,res){
  req.session.destroy(function(){});
  res.redirect('/count');
});
 
app.listen(3000function(){
  console.log('Connected 3000 port');
});
 
cs




세션의 값을 가져오거나 저장할때 req.session. 을 사용한다

세션의 값을 제거할 때는 delete req.session. 를 사용한다.

세션을 종료할때는 req.session.destroy(function(){});




'Node.js' 카테고리의 다른 글

라우터 분리  (0) 2017.03.02
cookie-parser  (0) 2017.02.27
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26

npm install cookie-parser


cookie-parser 는 쿠키를 사용하게해주는 모듈이다.


 

var express = require('express'); var cookieParser = require('cookie-parser'); //cookie-parser로드 var app = express(); app.use(cookieParser()); //cookie-parser 모듈 사용 app.get('/count',function(req,res){ if(req.cookies.count){ var count = parseInt(req.cookies.count); }else { var count = 0; } var count = count+1; res.cookie('count',count); res.send('count : '+req.cookies.count); }); app.listen(3000, function(){ console.log('Connected 3000 port'); });


res.cookie() 함수로 쿠키를 보낼수있고

req.cookies.cookiename 로 쿠키를 가져올 수 있다,


예제


 

var express = require('express');

var cookieParser = require('cookie-parser'); //cookie-parser로드 var app = express(); app.use(cookieParser()); //cookie-parser 모듈 사용 var products = { //products 배열객체생성 1:{title: 'The history of web 1'}, 2:{title: 'the next web'} }; //product list app.get('/products', function(req,res){ console.log('/products'); var output=''; for(var name in products){ //products 배열객체의 값들을 반복하는 for in 문 output += ` <li> <a href ="/cart/${name}">${products[name].title}</a> </li>` } res.send(`<h1>Products list</h1><ul>${output}</ul><a href ="/cart">Cart</a>`); }); //cart 에 product 쿠키로 product 저장 app.get('/cart/:id', function(req,res){ var id = req.params.id; //시맨틱url로넘어온 id 저장 if(req.cookies.cart){ //쿠키에 저장된 cart 가 존재할경우 var cart = req.cookies.cart; //cart변수에 cart 쿠키 저장 } else { //쿠키에 cart가 존재하지 않는경우 var cart={}; //cart 변수 초기화 } if(!cart[id]){ //cart[id] 배열에 값이 없으면 cart[id] = 0; //0으로 초기화 } cart[id] = parseInt(cart[id])+1; //id값에 해당하는 배열 +1 증가 res.cookie('cart',cart) //쿠키에 cart 전달 res.redirect('/cart'); //cart list 로 이동 }); //cart list cart에 저장된 쿠키 값 view app.get('/cart', function(req, res){ var cart = req.cookies.cart; //쿠키 값 받아옴 if(!cart) { //쿠키에 cart 값이 없다면 res.send('Empty!'); } else { //쿠키에 cart 값이 있다면 var output = ''; for(var id in cart){ output += `<li>${products[id].title} (${cart[id]})</li>`; } } res.send(` <h1>Cart</h1> <ul>${output}</ul> <a href="/products">Products List</a> `); }); app.listen(3003, function(){ console.log('Connected 3003 port'); });



쿠키 암호화

 

var cookieParser = require('cookie-parser'); //cookie-parser로드

app.use(cookieParser('3231ddas')); //cookie-parser 모듈 사용 //암호와 인자 키값 전달 app.get('/count',function(req,res){ if(req.signedCookies.count){ // signedCookies 는 암호화된 쿠키를 해독한 값을 가져올 수 있다. var count = parseInt(req.signedCookies.count); }else { var count = 0; } count = count+1; res.cookie('count',count,{signed:true}); //인자로 true 값 전달 res.send('count : '+req.signedCookies.count); });



'Node.js' 카테고리의 다른 글

라우터 분리  (0) 2017.03.02
session  (0) 2017.03.02
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26

npm install --save node-mysql


node-mysql 

node.js에서 mysql에 접근할수 있게해주는 모듈


 

var mysql = require('mysql');

var conn = mysql.createConnection({ host : 'localhost', //db접속 주소 user : 'root', //db접속id password : 'java0000', //db접속pw database : 'injava' //db명 }); conn.connect(); //db접속 var sql = 'SELECT * FROM board'; conn.query(sql,function(err,rows,fields) { if(err){ console.log(err); }else{ console.log('rows',rows); console.log('fields',fields); } }); conn.end();


mysql 모듈 로드후 conn 변수에 mysql.createConnection 함수로 db접속 정보를 담는다.

conn.connect(); 함수로 db에 접속하고

conn.query();함수에 쿼리문과 콜백함수를 인자로 전달한다.

쿼리문이 실행되고나서 실행되는 콜백함수의 인자인 rows에는 행의 정보가담겨있는 배열이다.

fields 에는 컬럼에관한 정보가 담겨있다.




 

var sql = 'SELECT * FROM board';

conn.query(sql,function(err,rows,fields) { if(err){ console.log(err); }else{ for(var i =0;i<rows.length;i++){ console.log(rows[i].board_title); } } });


rows 에는 쿼리문을 실행해 가져온 행의 배열이다 rows[인덱스번호].컬럼명 으로 특정값을 가져올수 있다.


 

var sql = 'INSERT INTO board(board_title,board_user,board_pw,board_content)VALUES(?,?,?,?)';

var params = ['test title','testuser','testpw','testcontent']; conn.query(sql,params,function(err,rows,fields) { if(err){ console.log(err); }else{ console.log(rows.insertId); } });


쿼리문에 ?,?,?,? 는

conn.query() 함수에 두번째 인자로 배열을 주게되면 배열의 값이 치환되어 쿼리문에 들어가 실행되게된다.


rows.insertId 는 db에 입력될때 생성되는 auto_increment 값을 알아낼수 있다.


'Node.js' 카테고리의 다른 글

session  (0) 2017.03.02
cookie-parser  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26
post 방식 데이터 전달 / 사용  (0) 2017.02.26

express에서는 파일을 업로드할때 미들웨어를 사용한다.


multer 

express를 이용해서 파일을 저장하는 모듈


app_file.js

 

var express = require('express');

var fs = require('fs'); var bodyParser = require('body-Parser'); var multer = require('multer'); var upload = multer({dest:'uploads/'}) //업로드가 가능한 미들웨어를 담는 함수 //dest: 는 경로 var app = express(); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); app.set('view engine','jade');

//파일업로드 폼 app.get('/upload',function(req,res){ console.log('upload GET') res.render('upload'); }); // single함수의 역할은 사용자가 전송한 데이터에 파일이 포함된다면 파일을 request에 전달한다. app.post('/upload',upload.single('userfile'),function(req,res){ console.log('upload POST') console.log(req.file); res.send('uploaded : '+req.file.filename) });


var multer = require('multer'); var upload = multer({dest:'uploads/'})m

multer 모듈을 require 하고 변수에 담는다. dest에는 파일을 저장할 경로명을 지정한다.
app.post('/upload',upload.single('userfile'),function(req,res)
app.post에 두번째 인자로 single함수를 전달한다. 이함수의 역할은 전송한 데이터에 파일이 포함된다면
request 에 file 이라는 프로퍼티에 파일의 정보를 전달한다. 
console.log(req.file); 결과




uplode.jade

 

doctype html

html head meta(chartset='') body form(action='/upload' method ='post' enctype = "multipart/form-data") input(type='file' name = 'userfile') input(type = 'submit')


파일업로드 폼은 enctype = "multipart/form-data" 속성을 주어야한다.


파일명 원본으로 업로드 방법

multer는 기본으로 랜덤의 파일명을 생성해 업로드한다. 이것을 파일명으로 업로드하려면

multer의 옵션을 변경해야 한다.


 

var express = require('express');

var fs = require('fs'); var bodyParser = require('body-Parser'); var multer = require('multer'); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') //경로 지정 콜백함수 }, filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now()) //파일명 지정 콜백함수 } }) var upload = multer({ storage: storage }); var app = express(); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); app.set('view engine','jade'); app.get('/upload',function(req,res){ console.log('upload GET') res.render('upload'); }); app.post('/upload',upload.single('userfile'),function(req,res){ console.log('upload POST') console.log(req.file); res.send('uploaded : '+req.file.filename) });


storage변수에 콜백함수로 경로와 파일명을 지정

var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') //경로 지정 콜백함수 } filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now()) //파일명 지정 콜백함수 } })


옵션지정

var upload = multer({ storage: storage });



'Node.js' 카테고리의 다른 글

cookie-parser  (0) 2017.02.27
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26
post 방식 데이터 전달 / 사용  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26

EJS 템플릿 엔진은 html과 문법이 유사하다. 

다른 템플릿 엔진인 jade는 html과 문법이 다르다는점에서 jade와ejs는 차이가있다.


npm프로젝트에서 npm install ejs 명령어로 설치한다.


ejs는 jsp와 문법이 비슷하다 <% %> 를 사용하여 서버의 데이터를 가져오거나 코드를 실행할수있다.

<% 자바스크립트코드 %> 

<%= 자바스크립트 객체%> 


app.js

 

var express = require('express');

var app = express(); var fs = require('fs'); var bodyParser = require('body-Parser'); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); // 정적 파일 위치 지정 app.set('view engine','ejs'); // 템플릿 엔진 세팅 app.get('/ejstest',function(req,res){ res.render('ejstest',{ title : 'title', num : 5}); }); app.listen(3000,function(){ console.log('Connected, 3000 port!'); });


ejstest.ejs

 

<html>

<head> <title><%= title %></title> //라우터에서 받은 객체의 title 값 사용 </head> <body> <h1>Loop</h1> <ul> <% for(var i = 0; i<num; i++){%> //라우터에서 받은 객체의 num 값 사용 <li> <%="Loop" + i%> </li> <%}%> </ul> </body


<% %> 안에 for문을 넣어 사용할수도 있고 객체의 값을 꺼내올수도 있다.




<% include ejstest.ejs%> 를 사용하면 jsp의 include 처럼 다른 소스코드를 포함시킬수있다.

 

app.js의 라우터는 includetest.ejs 파일을 렌더링하고있다.

 

app.get('/includetest',function(req,res){

res.render('includetest',{ title : 'title', num : 5}); });


includetest.ejs

 

<% include ejstest.ejs%>


includetest.ejs에 include 로 ejstest의 소스코드를 포함시켜 실행하면 ejstest.ejs 의 내용이 실행된다.




'Node.js' 카테고리의 다른 글

node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
post 방식 데이터 전달 / 사용  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26
jade 템플릿 엔진  (0) 2017.02.26


form.jade

 

doctype html

html head meta(charset = 'utf-8') body form(action='/form_receiver' method='post') p input(type='text' name='title') p textarea(name='description') p input(type='submit')


jade 템플릿에서는 태그의 속성 표시 문법으로 ()안에 속성을 추가한다. 

form(action='/form_receiver' method='post')



Express api 문서를 보면 post방식으로 전달된 데이터는 정의되어있지 않기 때문에

그 데이터를 사용하려면 body-parser 또는 multer 라는 미들웨어를 설치 해야한다.

body-parser 모듈을 애플리케이션에 붙이게되면 모든 요청은 먼저 미들웨어를 통과한 다음 라우터가 동작한다.

 

var express = require('express');

var app = express(); var bodyParser = require('body-parser'); //post방식 데이터를 사용하게해주는 bodyParser 모듈 로드 app.use(bodyParser.urlencoded({ extended: true })); //bodyParser모듈을 애플리케이션 객체에 붙이는코드 app.locals.pretty = true; //템플릿 엔진 코드에 들여쓰기 적용해주는 코드 app.set('view engine','jade'); //템플릿 엔진을 세팅하고 express와 연결하는 코드 app.set('views','./views'); //정적인 파일이 위치할 디렉터리를 지정하는 코드 app.get('/form',function(req,res){ // /form 요청을 받는 라우터 res.render('form'); //form.jade 파일을 랜더링해 사용자에게 보여주는코드 }); app.post('/form_receiver',function(req,res){ //post 방식의 요청을 받는 라우터 var title = req.body.title; var description = req.body.description; res.send(title+' '+description); }); app.listen(3000,function(){ console.log('Connected 3000 port'); });


cmd창에서 패키지에 body-parser 이라는 모듈을 설치하고

var bodyParser = require('body-parser');  모듈을로드한다. 이모듈은 post방식의 데이터를 사용할수 있게해준다.

app.use(bodyParser.urlencoded({ extended: true })); 이코드는 body-parser모듈을 애플리케이션에 붙이는코드이다.

이제 모든 요청은 미들웨어인 body-parser를 거쳐서 라우터로 오게된다.

get방식의요청은 app.set() post방식의요청은app.post() 으로 받는다.

get방식의 데이터는 req.query.name 으로 가져오지만 post방식의 데이터는 req.body.title 이런식으로 가져온다.









'Node.js' 카테고리의 다른 글

파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26
jade 템플릿 엔진  (0) 2017.02.26
정적페이지 / 동적페이지 표현  (0) 2017.02.26

get 방식 데이터 전달 (쿼리스트링)

get 방식으로 전달한 데이터는 req.query.name  를 사용해 가져온다.

request가 담긴 변수인 req 안의 query 객체에 get방식으로 보낸 데이터가 저장된다.


 

var express = require('express');

var app = express(); app.get('/topic', function(req, res){ var topics = [ 'Javascript is....', 'Nodejs is...', 'Express is...' ]; var output = ` <a href="/topic?id=0">JavaScript</a><br> <a href="/topic?id=1">Nodejs</a><br> <a href="/topic?id=2">Express</a><br><br> ${topics[req.query.id]} ` res.send(output); }); app.listen(3000,function(){ console.log('Connected 3000 port'); });


/topic 주소로 요청시

topics 이라는 배열에 문자열을 저장하고  인덱스에 쿼리스트링 객체 안의 id의 값을 전달해 

배열을 가져와 화면에 출력





semantic URL


시멘틱 URL은 쿼리스트링을 사용하지 않고 전달하는 방식이다.

http://localhost:3000/topic/2 이런식으로 요청한다.

시멘틱 방식일때는 라우터에 url의 패스 형식을 걸어준다. pp.get('/topic/:id'

/topic/2 로 요청이 온다면 id 라는 변수명으로 2 라는 값이 저장된다.

그값은 request 변수인 req의 params 객체에 저장되어있다. req.params.id  이런식으로 꺼내올수있다.

두개 이상의 값을 전달하려면 app.get('/topic/:id/:mode' 이런식으로 /:변수명/:변수명 이어서 작성한다.


 

var express = require('express');

var app = express(); app.get('/topic/:id', function(req, res){ var topics = [ 'Javascript is....', 'Nodejs is...', 'Express is...' ]; var output = ` <a href="/topic?id=0">JavaScript</a><br> <a href="/topic?id=1">Nodejs</a><br> <a href="/topic?id=2">Express</a><br><br> ${topics[req.params.id]} ` res.send(output); }); app.get('/topic/:id/:mode', function(req, res){ res.send(req.params.id+','+req.params.mode) }); app.listen(3000,function(){ console.log('Connected 3000 port'); });


 





'Node.js' 카테고리의 다른 글

EJS 템플릿 엔진 / include  (0) 2017.02.26
post 방식 데이터 전달 / 사용  (0) 2017.02.26
jade 템플릿 엔진  (0) 2017.02.26
정적페이지 / 동적페이지 표현  (0) 2017.02.26
Express 로 웹 애플리케이션 만들기  (0) 2017.02.26

템플릿엔진은 정적페이지와 동적페이지의 장점과 단점을 결합한 형태의 새로운 체계이다.

템플릿을 읽어 문법에 따라 HTML 파일로 변환시켜주는 모듈이다.

코드상단에 html작성하면 html의 시작태그와 끝나는태그를 자동으로 생성해준다.

head title body 코드도 자동으로 생성한다.

템플릿 엔진 안에서는 for문이나 변수도 사용할수 있다.


사용방법

cmd 창에서 npm 패키지 디렉터리로 들어가 npm install jade --save 를 입력해 설치한다.

npm패키지 디렉터리에다 views라는 디렉터리를 생성하고 (관습적으로 views 라는 이름을 많이사용)

views 폴더에 temp.jade 라는 파일을 생성한다.



app.js파일의 코드를 작성한다.

app.set('view engine,'jade'); 코드를 작성해 템플릿 엔진을 세팅하고 express와 연결한다.

app.set('views','./views'); 코드는 템플릿이 있는 디렉터리를 express에게 알려주는 코드이다.

res.render('temp'); temp.jade 파일을 찾아 템플릿 파일을 jade 문법에따라서 해석한 결과를 사용자에게 응답하는코드

render() 함수의 두번째매개변수로는 해당 jade파일에서 사용할 객체에 변수를 담아 전달해준다.


app.js

 

 

var express = require('express');

var app = express(); app.locals.pretty = true; //템플릿 엔진 코드에 들여쓰기 적용해주는 코드 app.set('view engine','jade'); //템플릿 엔진을 세팅하고 express와 연결하는 코드 app.set('views','./views'); //템플릿이 있는 디렉터리를 express에게 알려주는 코드 app.use(express.static('public')); app.get('/template',function(req,res){ res.render('temp',{time:Date(),title:'jade'}); //렌더링메소드 템플릿파일을 읽어와 사용자에게 전송 }); //첫번째인자는 파일명 두번째 인자로 객체에 현재시간 과 문자열 담아 temp파일에 주입 app.get('/', function(req,res){ res.send('Hello World'); }); app.listen(3000,function(){ //3000번 포트 리스닝 console.log('Connected 3000 port'); //리스닝이 실행되면 콘솔에 출력 });



jade는 줄바꿈시에 태그가 되어버리기 때문에 태그와 같은줄에 내용을 작성해야 한다.

- 를 붙여줘야 jade엔진에서 for문이 동작한다.

변수를 사용하려면 app.js파일에서 객체를 만들어 jade 파일에 주입시켜야한다.

태그에 =를붙이고 주입된 변수명을 입력하면 변수의 값을 불러올수 있다.ex)div= time


temp.jade

 

html

head title= title //app.js에서 받은 변수 body h1 hello jade ul -for(var i =0; i<5;i++) //-를 붙여줘야 jade엔진에서 for문이 동작한다. li coding div= time //app.js에서 받은 변수




'Node.js' 카테고리의 다른 글

post 방식 데이터 전달 / 사용  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26
정적페이지 / 동적페이지 표현  (0) 2017.02.26
Express 로 웹 애플리케이션 만들기  (0) 2017.02.26
모듈  (0) 2017.02.26

+ Recent posts