[Node.js] 미들웨어3

Posted by 신희준 on November 9, 2017



2017 - 11 - 09 (목)

  • body-parser
  • Router

  • body-parser 미들웨어


    GET 방식의 요청의 경우 주소 문자열에 요청 파라미터가 들어가지만 POST의 경우 Body에 내장되게 된다. 이 경우 요청 파라미터를 파싱하기위해 body-parser 미들웨어를 사용한다.


    $ npm install body-parser --save // 우선 해당 패키지를 설치한다
    


    간단한 예제를 보면

    <form method="post">
      <input type ='text' name = 'id'>
      <input type ='submit' value ='전송'>
    </form>
    
    var express =require('express');
    var bodyParser = require('body-parser');
    
    var app = express();
    // application/x-www-form-urlencoded 를 파싱한다
    app.use(bodyParser.urlencoded({extended: false}));
    // application/json 파싱
    app.use(bodyParser.json());
    app.use(function(req,res,next){
      var paramId = req.body.id||req.query.id;
      res.writeHead('200',{'Content-Type':'text/html;charset=utf-8'});
      res.write('<p>'+paramId+'</p>');
      res.end();
    })
    

    이 경우 결과적으로 input 의 값을 가진 html화면이 출력된다. 즉, POST 방식으로 요청했을 때 요청 파라미터를 읽을 수 있는 것이다.



    Routing


    이전에 요청을 받기위해 app.use() 메서드를 사용하였다. 하지만 use() 의 경우 특정 요청이아닌 무관한 요청이 들어올지라도 use() 로 설정한 미들웨어가 항상 호출되어 비 효율성을 발생시킨다. 이런 문제를 해결하고자 라우터 미들웨어를 활용한다.


    사용방법

    var router = express.Router();
    // '/process/login' 으로 들어온 get 방식의 요청을 처리한다
    router.route('/process/login').get(실행할 함수);
    


    메서드 이름 설명
    get(callback) GET 요청시 사용할 콜백함수 지정
    post(callback) POST 요청시 사용할 콜백함수 지정
    put(callback) PUT 요청시 사용할 콜백함수 지정
    del(callback) DELETE 요청시 사용할 콜백함수 지정
    all(callback) 모든방식의 요청시 사용할 콜백함수 지정


    app.get() , app.post, app.put ,…등등 과 비슷한 형식으로 쓰인다.


    <a href="/pagechange/gethome">홈화면으로</a>
    
    router.route('/pagechange/gethome').get(function (req, res) {
        console.log('홈화면 호출됨');
        res.redirect('/');
    });
    // a태그 를 클릭하면 /pagechange/gethome 으로의 요청을 받아 처리한다.
    app.all('/pagechange/gethome', function(req,res){
      res.redirect('/'); // 위와 동일한 작동을 한다.
    })