Node.js | Express에 의한 요청 처리 기본 | 쿼리 문자열로 페라미터 전송


어느 페이지에서 다른 페이지에 액세스할 때, 어떠한 형태로 필요한 정보를 전달할 필요가 있었다. 어떤 방식을 생각할 수 있을까?

쿼리 문자열로 페라미터 전송하기

우선, 모두가 생각할 수 있는 것은 “쿼리 문자열"을 이용하는 것이다. 쿼리 문자열이라고 하는 것은, URL의 뒷부분에 사용하여 값을 작성한다. 예를 들어. http://localhost/index?a=hello와 같은 형태로 URL을 지정하여 a라는 페라미터에 “hello"를 설정하여 보낼 수 있다.

이 쿼리 문자열 값은 Request 객체의 “query” 속성 안에 정리되고 있다. 이 중에 각각의 key마다 속성으로 값이 저장된다. 예를 들어, /index?a=hello라면, quey.a에 “hello"가 저장되어 있다는 것이다.

실제로 간단한 사용 예제를 아래에 올려 두었다.

views/helo.ejs

 <body>
   <h1><%= title %></h1>
   <p><%= msg %></a>
   <p><a href="/helo?p1=hello&p2=bye">link</a></p>
 </body>

routes/helo.js

var express = require('express');
var router = express.Router();
 
/* GET helo page. */
router.get('/', function(req, res, next) {
    var p1 = req.query.p1;
    var p2 = req.query.p2;
    var msg = p1 == undefined ? "" : p1 + "," + p2;
    res.render('helo', 
        {
            title: 'HELO Page',
            msg: msg
        }
    );
});
 
module.exports = router;
app.get('/helo', helo.helo);

지난번 작성한 것처럼, views 폴더 안에 helo.ejs, routes 폴더 안에 helo.js을 배치하고, app.js 안에 이것들을 이용하기 위한 코드를 추가한다.

여기에서는 href="/helo?p1=hello&p2=bye으로 <a> 태그 링크를 작성하고 있다. 그리고 /helo 액세스 처리는 다음과 같이 쿼리 문자열에서 값을 얻어서 사용하고 있다.

var p1 = req.query.p1;
var p2 = req.query.p2;
var msg = p1 == undefined ? "" : p1 + "," + p2;

쿼리 문자열이 전달되지 않은 경우, p1과 p2의 값은 undefined이다. undefined이 아니면, 쿼리 문자열에 어떤 값이 전달되어 있다고 생각해도 좋을 것이다.

 

여기의 예제는 express 명령으로 Web 어플리케이션을 생성하고 이용하는 것을 전제로 작성하고 있다. express 명령을 사용하여 어플리케이션의 생성에 대해서는 다음을 참조한다.

express-generator 설치