코드

 

// Express 기본 모듈 불러오기

var express = require('express')

, http = require('http')

, path = require('path');

 

// Express의 미들웨어 불러오기

var bodyParser = require('body-parser')

, cookieParser = require('cookie-parser')

, static = require('serve-static')

, errorHandler = require('errorhandler');

 

// 에러 핸들러 모듈 사용

var expressErrorHandler = require('express-error-handler');

 

// Session 미들웨어 불러오기

var expressSession = require('express-session');



// 익스프레스 객체 생성

var app = express();

 

// 기본 속성 설정

app.set('port', process.env.PORT || 3000);

 

// body-parser를 이용해 application/x-www-form-urlencoded 파싱

app.use(bodyParser.urlencoded({ extended: false }))

 

// body-parser를 이용해 application/json 파싱

app.use(bodyParser.json())

 

app.use('/public', static(path.join(__dirname, 'public')));

 

// cookie-parser 설정

app.use(cookieParser());

 

// 세션 설정

app.use(expressSession({

  secret:'my key',

  resave:true,

  saveUninitialized:true

}));



// 라우터 사용하여 라우팅 함수 등록

var router = express.Router();

 

// 로그인 라우팅 함수 - 로그인 후 세션 저장함

router.route('/process/login').post(function(req, res) {

  console.log('/process/login 호출됨.');

 

  var paramId = req.body.id || req.query.id;

  var paramPassword = req.body.password || req.query.password;

  

  if (req.session.user) {

    // 이미 로그인된 상태

    console.log('이미 로그인되어 상품 페이지로 이동합니다.');

    

    res.redirect('/public/product.html');

  } else {

    // 세션 저장

    req.session.user = {

      id: paramId,

      name: '소녀시대',

      authorized: true

    };

    

    res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});

    res.write('<h1>로그인 성공</h1>');

    res.write('<div><p>Param id : ' + paramId + '</p></div>');

    res.write('<div><p>Param password : ' + paramPassword + '</p></div>');

    res.write("<br><br><a href='/process/product'>상품 페이지로 이동하기</a>");

    res.end();

  }

});

 

// 로그아웃 라우팅 함수 - 로그아웃 후 세션 삭제함

router.route('/process/logout').get(function(req, res) {

  console.log('/process/logout 호출됨.');

  

  if (req.session.user) {

    // 로그인된 상태

    console.log('로그아웃합니다.');

    

    req.session.destroy(function(err) {

      if (err) {throw err;}

      

      console.log('세션을 삭제하고 로그아웃되었습니다.');

      res.redirect('/public/login2.html');

    });

  } else {

    // 로그인 안된 상태

    console.log('아직 로그인되어있지 않습니다.');

    

    res.redirect('/public/login2.html');

  }

});

 

// 상품정보 라우팅 함수

router.route('/process/product').get(function(req, res) {

  console.log('/process/product 호출됨.');

  

  if (req.session.user) {

    res.redirect('/public/product.html');

  } else {

    res.redirect('/public/login2.html');

  }

});

 

app.use('/', router);



// 404 에러 페이지 처리

var errorHandler = expressErrorHandler({

static: {

'404': './public/404.html'

}

});

 

app.use( expressErrorHandler.httpError(404) );

app.use( errorHandler );



// Express 서버 시작

http.createServer(app).listen(app.get('port'), function(){

console.log('Express server listening on port ' + app.get('port'));

});

로그

 

C:\Program Files\nodejs\node.exe app.js

 

Express server listening on port 3000
/process/login 호출됨.
/process/product 호출됨.

설명 

 

세션 존재 여부에 따라 페이지가 달라지는 프로그램이다.

최초 로그인 시 세션을 생성하고

이후에 세션 존재 시 상품 페이지로 즉시 이동, 로그아웃 버튼이 화면에 표시된다.

로그아웃 시 세션이 삭제된다.

'IT > Node JS' 카테고리의 다른 글

Node.js 다운로드 사용하기  (0) 2019.06.05
Node.js 파일 업로드 사용하기  (0) 2019.06.05
Node.js 쿠키 사용하기  (0) 2019.06.05
Node.js 에러 처리하기  (0) 2019.06.05
Node.js params 객체 사용하기  (0) 2019.06.05

+ Recent posts