1.1 Querystring
Querystring
'req.param()'을 이용하여 쿼리스트링을 통해 요청된 파라미터를 받아낼 수 있다.
app.get('/user', function (req, res) {
var u_name = req.param('name');
var u_age = req.param('age');
res.send("User Name : " + u_name + " / User Age : " + u_age);
});
쿼리스트링의 id는 name과 age로 하여 보내고자 하는 데이터를 서버에 요청하자. 'http://localhost:3000/user?name=kim&age=20'로 페이지 요청을 해보면 다음과 같이 나타난다.
1.2 Path
'req.param()'을 이용하여 파라미터를 받을 수도 있지만 'req.params'를 이용하는 것이 더욱 바람직하다. 'req.params'는 json 객체로 데이터에 접근하는 key는 라우팅할 때 '/:key' 형식으로 지정이 가능하다. 전달하고자 하는 데이터(value)는 경로에 맞는 위치에 입력하여 요청하면 된다. 아래의 예제코드를 살펴보자.
app.get('/user/:name/:age', function (req, res) {
var params = req.params;
console.log(params);
res.send("User Name : " + params.name + " / User Age : " + params.age);
});
'req.params' 객체의 key는 name과 age로 지정하였고 params의 데이터 형식을 알아보기 위해 콘솔에 찍어보았다. 이제 데이터를 경로에 맞는 위치에 입력하여 전송해보자. 'http://localhost:3000/user/kim/20'로 페이지 요청을 보낸다.
POST method
POST 방식 요청의 파라미터 전송은 우리의 눈에 보이지 않는 body에서 이루어진다. body를 통해 데이터를 전송받기 위해서는 'req.on()'을 사용할 수도 있지만 외장 모듈인 'body-parser'를 사용하면 간편하다. 만약 Express v4.16.0 이상을 사용한다면 익스프레스에 자동으로 내장되어있다.
$ npm install body-parser
설치가 완료되면 모듈을 임포트한 후 body-parser를 이용할 body의 종류를 등록해야한다.
var bodyParser = require('body-parser'); // 모듈 import. Express v4.16.0이상은 생략 가능
app.use(bodyParser.json()); // json 등록
app.use(bodyParser.urlencoded({ extended : false })); // URL-encoded 등록
URL-encoded는 주소 형식으로 데이터를 보내는 방식이다. 'extended' 옵션이 false면 쿼리스트링을 해석함에 있어서 querystring 모듈을 사용해야하고 true면 qs 모듈을 사용해야 한다. 모든게 완료되면 'req.body'를 이용하여 파라미터를 받을 수 있게 된다. 이외에도 Raw나 Text형식의 body를 추가로 해석할 수 있으나 이 경우에는 익스프레스에 내장된 body-parser가 아니라 따로 body-parser를 설치하여 사용해야 한다.
모든 준비가 완료되면 'req.body'를 이용하여 데이터를 전송받을 수 있다.
app.get('/', function (req, res) {
var template =
`<!DOCTYPE html>
<html>
<body>
<form action='/login' method='post'>
ID : <input type='text' name='id'><br>
PWD : <input type='password' name='pwd'><br>
<input type='submit' value='login'>
</form>
</body>
</html>`;
res.writeHead(200, {'ContentType':'text/html'});
res.write(template);
res.end();
});
app.post('/login',function (req, res) {
var body = req.body;
console.log(body);
res.send("ID : " + body.id + " / PWD : " + body.pwd);
});
간단하게 POST 요청을 할 페이지와 요청된 데이터를 받아서 처리할 페이지를 만들었다. 'req.body'는 json 객체로 콘솔에 출력하여 확인해보았다.