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); 

Node.js – 3 : Javascript

 ** Array
>push() : 배열의 끝에 요소 추가
>pop() : 배열의 끝 요소 삭제
>unshift() : 배열의 앞에 요소 추가
> shift() : 배열의 앞에 요소 삭제
> splice(index, removeCount, [Object]) : 여러개의 객체를 요소로 추가하거나 삭제. ex> splice(2,0,..) : 2인덱스부터 객체 삽입.
> splice(index, copyCount) : 여러 개의 요소를 잘라내어 새로운 배열 객체로 만듬. ex> splice(2,2) : 2인덱스 부터 2개 삭제
> delete : 배열 요소 삭제 ex> delete Users[1]; 1인덱스 배열 요소 삭제. 데이터만 삭제되어 배열 사이즈는 변동 없음.
>> example


Users.splice(1,0,{name:'bear', age:25});
console.log('splice()로 한개를 1인덱스에 추가한 후;);
console.dir(Users);


Users.splice(2,1);
console.log('splice()로 2인덱스 한개 삭제한 후;);
console.dir(Users);


> slice(int startindex, int endindex)
var Users2 = Users.slice(1,3);
var User3 = User2.slice(1);


** callback
> example
function add(a, b, callback){
    var result = a+b;

    callback(result);

}


add(10,10, function(result){
    console.log('resule : %d', result);

});


> example 1
function add(a,b, callback)
{ 
    var result = a + b;

    callback(result);



    var history = function() {

        return a+'+'+b+'='+result;

    }
    return history;

}


var add_history = add(10, 10, function(result) {
    console.log('add %d', result);

});


conslog.log('result : ' + add_history());


> example 2
function add(a,b, callback)
{ 
    var result = a + b;
    callback(result);


    var count = 0;

    var history = function() {
        count++;

        return count + ': ' + a+'+'+b+'='+result;
    }
    return history;
}


var add_history = add(10, 10, function(result) {
    console.log('add %d', result);
});


conslog.log('result : ' + add_history());
conslog.log('result : ' + add_history());
conslog.log('result : ' + add_history());
>>>> Closure


** Prototype
function Person(name ,age) {
    this.name = name;

    this.age = age;

}


Person.prototype.walk = function(speed) {
    console.log(speed + 'km');

}


var person01 = new Person('P_1', 20);
var person02 = new Person('P_2', 22);


person01.walk(10);


> prototype 속성을 추가하면 인스턴스 객체를 만들 때 메모리를 효율적으로 관리할 수 있음.