NodeJs – 4 – Node 기본 기능

 ** URL 모듈
> 주소 문자열을 객체로 만들어 문자열 안에 있던 각각의 정보를 나누어 그 객체의 속성에 보관.
> Example
https://www.google.co.kr/?gwr_rd=ssl#newwindow=1&q=actor
protocol : 'https'
host : 'www.google.co.kr'
query :'gws_rd=ssl#newwindow=1&q=actor


>parse() - 주소 문자열을 파싱하여 URL 객체를 만듬.
>format() - URL  객체를 주소 문자열로 변환


** querystring
> parse() - 요청 파라미터 문자열을 파싱하여 요청 파라미터 객체로 만듬
> stringify() - 요청 파라미터 객체를 문자열로 변환


> 파일


> 로그 남기기
>> winston 모듈 활용







 

NodeJs – 6 – 쿠키, 세션 관리하기

 사용자가 로그인 상태인지 아닌지 확인하고 싶을 때 쿠키나 세션 사용.
쿠키는 클라이언트 웹 브라우저의 정보,
세션은 웹 서버에 저장되는 정보.


> 쿠키 처리하기
>> code
var cookieParser = require('cookie-parser');
....
app.use(cookieParser());
....


var router = express.Router();




router.route('/process/showCookie').get(function(req, res){
  console.log('/process/showCookie 호출');
  res.send(req.cookies);
});


router.route('/process/setUserCookie').get(function(req, res){
  console.log('/process/setUserCookie 호출');
  res.cookie('user', {
    id: 'boy',
    name: '찰리',
    authorized: true
  });
  res.redirect('/process/showCookie');
});


app.use('/', router);


>> 설치


npm install cookie-parser --save


> 세션처리하기


로그인하면 세션 생성, 로그아웃하면 세션 삭제 -> 로그인하기 전까지 접근을 제한할 수 있음.


>> 설치
npm install express-session --save


>> code


var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');


....


app.use(cookieParser());
app.use(expressSession({
  secret: 'my key',
  resave: true,
  saveUninitialized: true
}));


var router = express.Router();


// session check
router.route('/process/product').get(function(req, res) {
  console.log('/process/product 호출됨');
  if (req.session.user) {
    res.redirect('/html/product.html');
  } else {
    res.redirect('/html/login2.html');
  }
});


app.use('/', router);


// login
router.route('/process/login').pose( 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: 'boy',
      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');
  }
});







 

NodeJS – 5 – 웹서버만들기

 -- 미들웨어


> npm install express --save


>static 미들웨어
>> npm install server-static ---save
>>>app.use(express.static(path.join(__dirname, 'public')));


> body-parser 미들웨어
>> npm install body-parser --save
>>>
app.use(bodyParser.json());    // application/json 형식으로 전달된 요청 파라미터를 파싱.
app.use(bodyParser.urlencoded({ extended: true }));    // application/x-www-form-urlencoded 형식으로 전달된 요청 파라미터를 파싱.


> Router 미들웨어


// app.js
var router = express.Router();


.....


router.route('process/login:name').post('function(req,res) {
....
});


app.use('/'.router);


// html.html


<form method="post" action="/process/login/boy">


// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
  res.send(404, '<h1> 페이지를 찾을 수 없음돠. </h1>');
});


 express-error-handler 미들웨어


>> npm install express-error-handler --save


>>> code


var expressErrorHandler = require('express-error-handler');
....
var errorHandler = expressErrorHandler({
  static: {
    '404': './public/html/404.html'
  }
});


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


> Using Token
>>> code


var router = express.Router();


.....


router.route('process/users/:id').get('function(req,res) {
var paramId = req.params.id;
  console.log('/process/usersdhk 토큰 %s를 사용해 처리함', paramId);


  res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
  res.write('<h1> Express 서버에서 응답한 결과입니다.</h1>');
  res.write('<div><p>Param Id:'+paramId+'</p></div>');
  res.end();
});


app.use('/'.router);