2017 - 11 - 09 (목)
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('/'); // 위와 동일한 작동을 한다.
})