공부하는 블로그

Node.js | Express : Request Parameters 본문

Node.js

Node.js | Express : Request Parameters

치킨닮은닭 2019. 12. 23. 01:45

GET method

 GET 방식의 요청에서 파라미터를 전송하는 방법은 두 가지가 있다. 쿼리스트링(Querystring)이나 경로(Path)를 통하여 파라미터를 전달할 수 있다. 각각의 방법을 알아보자.

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'로 페이지 요청을 해보면 다음과 같이 나타난다.

 

name=kim&age=20' 페이지 요청 결과

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'로 페이지 요청을 보내면 다음과 같이 나타난다.

 

'http://localhost:3000/user/kim/20' 페이지 요청 결과
params

 

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 객체로 콘솔에 출력하여 확인해보았다. 이제 서버를 실행하여 결과를 확인해보자.

 

POST 요청을 보낼 폼(Form)
요청 결과 페이지
req.body

'Node.js' 카테고리의 다른 글

Node.js | Node.js - MySQL : 연동하기  (16) 2019.12.28
Node.js | Express : Template Engine  (0) 2019.12.28
Node.js | Express : Routing  (0) 2019.12.19
Node.js | Express : Intro  (0) 2019.12.19
Node.js | GET & POST 요청에 응답하기  (0) 2019.12.17
Comments