body-parser 미들웨어
이번에는 post로 요청했을때 요청 파라미터를 확인할 수 있도록 만들어둔 body-parser 미들웨어에 대해 알아보겠습니다.
get방식으로 요청할떄는 주소 문자열에 요청파라미터가 들어갑니다.
하지만 이와달리 post방식으로 요청할떄는 본문인 본문영역에 요청 parameter가
들어있게 되므로 요청 parameter를 파싱하는 방법이 get방식과 다르게 됩니다.
body-parser 미들웨어는 클라이언트가 post 방식으로 요청할때 본문 영역에 들어있는
요청 파라미터들을 파싱하여 요청 객체의 body속성에 넣어줍니다.
다음과 같이 클라이언트 단에서 post 형식으로 전송할 수 있는 form을 생성해보겠습니다.
먼저 클라이언트 단의 login 페이지를 만들어보겠습니다.
public/login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 테스트</title>
</head>
<body>
<h1>로그인</h1>
<br>
<form method="post">
<table>
<tr>
<td><label>아이디</label></td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td><label>비밀번호</label></td>
<td><input type="password" name="password"></td>
</tr>
</table>
<input type="submit" value="전송" name="">
</form>
</body>
</html>
body-parser 모듈을 새로 추가해야됩니다.
다음과 같이 명령 프롬프트에서 입력합니다.
> npm install body-parser --save
다음은 웹서버 입니다.
//Express 기본 모듈 불러오기.
var express = require('express');
var http = require('http');
var static = require('serve-static');
var bodyParser = require('body-parser');
var path = require('path');
//Express 객체 생성
var app = express();
//기본포트를 app 객체에 속성으로 설정
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(static(path.join(__dirname, 'public')));
//미들웨어에서 파라미터 확인
app.use(function(req, res, next){
console.log('첫번째 미들웨어에서 요청을 처리함.');
var paramId = req.body.id || req.query.id;
var paramPassword = req.body.password || req.query.password;
res.writeHead('200',{'Content-type':'text/html;charset=utf8'});
res.write('<h1>express 서버에서 응답한 결과입니다.</h1>');
res.write('<div><p>param id: '+paramId+'</p></div>');
res.write('<div><p>param password: '+paramPassword+'</p></div>');
res.end();
});
//Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
console.log('Express 서버를 시작했습니다. : '+ app.get('port'));
});
클라이언트에서 요청할떄 get방식으로 요청할지, 아니면 POST방식으로요청할지 모르는 경우엔
어떻게 처리르해야할까요?
두가지 모두 고려하기위해서 다음처럼 두가지 요청 파라미터를 모두 검사합니다.
post 방식 vs get방식 모두 고려!
var paramId = req.body.id || req.query.id;
http://localhost:3000/login.html
아이디와 패스워드를 입력후 전송버튼을 누릅니다.
[결과화면]