Nodejs - 쿼리스트링

jihan kong·2022년 2월 24일
0

Nodejs

목록 보기
12/16
post-thumbnail

어플리케이션.

즉, 우리가 앱이라고 했을 때, 사용자는 앱이 항상 똑같은 내용만을 출력하는 것을 원하지 않을 것이다. 사용자의 입력(조작)에 따라 다른 내용을 출력해주는 기능을 담고 있어야 진정한 의미의 앱이라고 할 수 있다.

우리는 그중에서도 웹을 다루는 어플리케이션을 학습해왔다. 이는 사용자가 어떤 주소(URL)로 접근하냐에 따라서 다른 결과를 보여주는 어플리케이션을 말한다.

예를 들어, 사용자가 http://a.com/login 이라는 도메인으로 접근했을 때, 라우터가 path에 연결되어 있는 컨트롤러를 호출해서 그에 맞는 내용을 출력해주는 식이다. URL에 뒷부분에 붙어있는 /login 과 같은 것을 path라고 하는데 이것에 따라 각기 다른 경로로 이동할 수 있게된다. 따라서 만약 http://a.com/home, http://a.com/topic 등 사용자의 입력을 다르게 한다면 각자 다른 내용이 호출될 것이다.

http://a.com/topic 이라는 도메인은 항상 같은 결과를 보여줄 것인데, 이 하나의 path로 접근했을지라도 경우에 따라 다른 내용을 서비스한다면 추가적인 정보를 얻을 수 있을 것이다.


쿼리스트링

http://a.com/topic?id=1
http://a.com/topic?id=2
http://a.com/topic?id=3

위의 세 주소는 topic 이라는 같은 path 혹은 라우터를 가지고 있다. 그러나 물음표 뒤의 id값을 다르게 주면서 다른 웹 페이지 결과를 만들어낼 수 있다. 이를 가능하게 하는 것이 바로 쿼리 스트링(Query String) 이다.

흔히 우리가 어떤 웹 사이트에 접속했을 때, 엔드포인트 이후 ? 기호를 사용하고 그 뒤에 여러가지 문자열들이 나열되는 것을 볼 수 있는데 이 내용에 따라서 우리는 각기 다른 페이지 정보를 읽어올 수 있는 것이다.

자, 그렇다면 실제로 쿼리스트링을 어떻게 사용하여 웹을 구성하는지 알아보자.

app.js 를 열어 지금까지 했던 코드를 살펴보면..

app.js

var express = require('express');
var app = express();

app.locals.pretty = true;
app.set('view engine', 'pug');
app.use(express.static('public'));

app.get('/topic', function(req, res) {
  res.send('Hello');
})
app.get('/template', function(req, res) {
  res.render('temp', {time:Date()});
})
app.get('/', function(req, res){
    res.send('Hello home page');
});
app.get('/dynamic', function(req, res) {
    var lis = '';
    for(var i=0; i<5; i++) {
      lis = lis + '<li>coding</li>';
    }
    var time = Date();
    var output = `
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
      </head>
      <body>
        Hello Dynamic!
        <ul>
          ${lis}
        </ul>
          ${time}
      </body>
    </html>`;
    res.send(output);
});
app.get('/route', function(req, res) {
    res.send('Hello nodejs, <img src="/route.png">')
})
app.get('/login', function(req, res){
    res.send('Login please');
});
app.listen(3000, function() {
    console.log('Connected 3000 port!');
});




우리는 /topic path를 통해 쿼리스트링을 구현해볼 것이므로 다음의 코드에 집중해본다.

app.get('/topic', function(req, res) {
  res.send('Hello');
})

get 메소드의 익명함수의 인자로 req(request)를 받을 수 있었다. 그 인자를 query(string)의 id를 참조하게끔 만들어주기 위해 다음과 같이 작성하자.

app.get('/topic', function(req, res) {
  res.send(req.query.id);
})

이제 서버를 실행하고 테스트해보면

위와 같이 쿼리스트링에 전달된 값이 그대로 출력된 것을 볼 수 있다. 이는 쿼리스트링 값이 함수 즉, 컨트롤러에 첫번째 인자값에 query라는 객체로 감싸고 id라는 프로퍼티값으로 들어온 것이다.

그렇다면 프로퍼티만 변경해주면 우리가 원하는 값을 받아서 그대로 출력할 수 있게 된다. 만약 id와 name을 모두 출력하고 싶다면

app.get('/topic', function(req, res) {
  res.send(req.query.id + ',' + req.query.name);
})

위와 같이 작성하고 주소창에 id에는 1, name에는 kjh를 값으로 넣어주고 주소를 입력하면

위와 같이 출력된다. 또한 두 개 이상의 값을 출력할 때는 &(ampersand) 기호를 사용한다.

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글