2015년 1월 14일 수요일

[node express] express-session 간단 사용 예제


  • session은 서버가 클라이언트를 식별하기 위하여 사용한다. 대표적인 사용예로는 로그인 관리가 있다.
  • express 3.x 버전에서는 express의 Middleware 즉, express-session, cookie-session, body-parser, cookie-parser 외의 여러 내장했던 모듈들이 포함되어 있었다고 한다.
  • 하지만 express 4.x 버전 부터는 이러한 미들웨어들이 분리가 되면서, express-session등을 따로 사용하기 위해선 별도의 설치가 필요하다.

  • 진행중인 express 폴더내에 express-session을 따로 설치해준다.


1
npm install express-session

  • 그리고 express에 연결시켜줍니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var express = require('express');
var session = require('express-session');
...
var app = express();
...
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true
}));

  • 여기서 secret은 쿠키의 값의 변조를 방지하기 위한 값입니다. 그리고 세션의 기본 난수 발생 등을 위하여 사용되는 것입니다.??(확인 안해봤습니다.) 값은 원하시는 대로 넣으시면됩니다.
  • resave는 세션의 값이 변경이 될경우 자동 저장의 여부인데 기본적으로 default값은 true값 이지만 express-session 메뉴얼에서도 추천하지 않습니다.
  • saveUninitalized는 반대로 default값이 false지만 역시 express-session에서 추천하지 않습니다. 때문에 true로 설정합시다.
  • 연결이 되었으니 사용해 봅시다.


1
2
3
//req.session.[세션의 변수명] = [넣을 값];

req.session.logined = 'logined';

  • 이제 express내에서 받아오는 request(req)의 세션 값을 가져오고 수정하기 위하여 위와 같이 접근하면 됩니다.

2015년 1월 13일 화요일

[node 웹페이지 만들기] 4. Mysql 연결하기

  • 값이 서로 넘어가는 방법을 알아보았고, mysql 모듈을 사용하는 방법을 알아내었으니 회원가입을 하여 db에 저장하는 방법을 해보려고 합니다.
  • db에 연결하는 방법은 단순히 connection을 이용하는 방법이 있지만, 실제서버에서는 안정적인 connection pooling기법을 사용하고 있습니다.


 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
var pool  = mysql.createPool({
  connectionLimit : 150,
  host     : 'localhost',
  user     : 'root',
  password : '1234',
  database : 'node'
});

...
...
...
//members
router.post('/members', function(req,res){
 // console.log(req.body);
 var attr = req.body;
 delete(attr.id_ch);
 delete(attr.pass_ch);
 delete(attr.email_ch);
 delete(attr.tel1);
 delete(attr.m_tel2);
 delete(attr.m_tel3);
 delete(attr.m_pass_ch);

 var queryString = 'Insert into member Set ?';
 pool.getConnection(function(err,connection){
  connection.query(queryString,req.body, function(err, result) {
   if (err) throw err;
   console.log("insert member!");
  });
  connection.release();
  res.render('members',req.body);
 });
});

  • pooling 예제에서했던것들을 중간에 넣어 사용하면 끗!
  • join(회원가입)에서 members로 페이지를 넘기면 db에관한 처리후(24~30라인) members.ejs를 불러와 페이지를 로드(31번라인)합니다.
  • 제 예제에서는 member에 들어가는 값들에는 불필요한 값들(16~22번라인)의 값들을 제거하고 26번줄의 req.body를 넣어줌으로서 값에 대한 맵핑을 손쉽게 처리하였습니다.


  • 으로 값을 넣어 가입을 눌러
  • DB에 값이 저장되었습을 확인하였습니다.