[node] 라우팅 get, post 파라미터 받기

Edward Hyun·2022년 3월 31일
0

backend

목록 보기
44/120

#1 Get 방식

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'로 페이지 요청을 보낸다.

#2 Post 방식

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 객체로 콘솔에 출력하여 확인해보았다.

출처::
https://gongbu-ing.tistory.com/26

profile
앱&웹개발(flutter, vuejs, typescript, react), 인공지능(nlp, asr, rl), 백엔드(nodejs, flask, golang, grpc, webrtc, aws, msa, nft, spring cloud, nest.js), 함수형 프로그래밍(scala, erlang)을 공부하며 정리합니다.

0개의 댓글