본문 바로가기

Dev.BackEnd/Node.js

[열번째] Node.js 기본 / 클라이언트와 서버의 의사소통 방식 (GET & POST) II


Post방식

app.post('/form_receiver', function(req,res){
    var title = req.body.title;
    var description = req.body.description;
    res.send(title+','+description);
});
res.send에 해당하는 부분이 /form_receiver에 출력될 것을 기대할 수 있다.
그런데 에러가 뜬다.
TypeError: Cannot read property 'title' of undefined
body 가 존재하지 않는다고?

API를 보니까
Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.

body-parser 라는 미들웨어(확장기능)를 설치하라고 한다.
body-parser를 install하면 req.body 를 사용할 수 있다.
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));

바디파서가 작동하면서 포스트 방식으로 전송하는 것을 모듈이 하게 된다.
req객체에 body가 포함되었다.
포스트 전송 방식을 사용할 수 있게 되었다.

미들웨어를 application에 require 하고 use 시켰다.
req객체가 원래 가지고 있지 않았던 body라고 하는 객체를 추가하는 것이다.
추가한 바디파서는 사용자가 포스트방식으로 전송한 데이터가 있다면 작동한다.
그리고
사용자가 입력한대로
title이라는 프로퍼티를 body에
description이라는 프로퍼티를 body에 넣는다.
그래서 출력할 수 있게 된다.


그렇다면
언제 GET를 언제 POST를 쓰는가

GET
링크를 클릭했을 때 원하는 것을 출력하는 것 = 주소가 바뀌는 것
정보에 대한 주소를 나타낼 때는 URL 상에 모든 정보를 포함시켜야 한다.

POST
URL 상에 정보가 나타나지 않는 경우/
정보의 전송은 이루어지지만 URL에 전송한 데이터가 나타나지 않는다.
(불필요한 정보를 URL에 공개하지 않는다.)
그렇다고 보안적으로 충분하다고 볼 수 없다.
보안은 다른 차원의 접근이 필요하다.

! url의 일정 길이보다 더 길이지면 정보를 버린다.
그래서 GET을 이용하게 되면 데이터를 모두 전달하지 못할 수도 있다.
그래서 전송할 데이터가 많은 경우엔 POST로 지정한다.(용량 제한이 없다)

+TIP+
npm supervisor!
==> supervisor app.js 라고 cmd창에 입력!
app.js 파일이 변경됬을 때 자동적으로 node app.js를 껐다가 켜준다.



생활코딩 감사합니다^^
-..-