Rubberduck-Debugging

nodeJS get, post , 실습 본문

개발자/20181127 교육과정

nodeJS get, post , 실습

P缶 2019. 1. 7. 12:10

         1. 요청 방식 : GET, POST

Get 요청 
-URL로 요청 정보 전달, URL만 분석 (?a=111&boardid=10&....)
-길이 제한, 암호화 불리

Post 요청 
-메시지 바디(entity)로 요청 정보 전달 
-바디 분석 필요

-전송 방식
웹 브라우저의 폼(form) 입력 : GET/POST 요청
<form method=‘post’ action=‘/upload’>
</form>

2. 폼 인코딩 방식
폼 인코딩
-폼 요청 - 요청 바디에 요청 정보 작성
-요청 바디에 메시지 인코딩 방식 : enctype
-- application/x-www-form-urlencoded  (default)
-- multipart/form-data (파일 전송)
-- text/plain


3. 폼 데이터 전송 방식
form-urlencoded 방식
이름=값 방식으로 작성. 쿼리 문자열

-메세지 예
form 태그내 name과 value
POST HTTP/1.1
Host: 127.0.0.1:3000
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
key1=value1&key2=value2


-멀티파트 방식의 폼
파일,글자 등 여러 데이터 전송

-멀티파트(multipart) 방식 : 
<form method="post" action="upload"
 enctype="multipart/form-data">
</form>
-요청 메세지 헤더 컨텐츠 타입 필드 
Content-Type: multipart/mixed; boundary=frontier 

-------------------------------------------------------------------------------------------------------

POST 요청 (서버에서 처리하기)

1. 요청 데이터 얻기
var body = '';
request.on('data', function(chunk) {
 console.log('got %d bytes of data', chunk.length);
 body += chunk;
});
request.on('end', function() {
 console.log('there will be no more data.');
 console.log('end : ' + body);
});


2. 요청 데이터 처리
-전송이 끝나면 : end 이벤트

-end 이벤트 핸들러 함수 : querystring 모듈로 분석

request.on('end', function() { 
var parsed = querystring.parse(body); 
console.log(‘name1 : ' + parsed.name1); 
console.log(‘name2 : ' + parsed.name2);
 }); 


POST 요청 후 새로고침(F5)
Post 요청 후 Refresh 
-중복 Post 요청

중복 POST 요청 방지
   -POST 요청 처리 후 redirect 응답
   -PRG(Post-Redirect-Get) 패턴
   -리프레쉬 – Get 요청 중복(OK)

응답 메세지 작성 코드
-Redirection : 클라이언트 주소 옮기기
-상태코드 : 302
-헤더 필드 : Location
res.writeHead(302, {'Location':'http://google.com'});  //redirect 방식

-PRG 패턴 적용 코드 
req.on('end', function() {
// POST 요청 메세지 바디 분석/처리
 res.statusCode = 302;
 res.setHeader(‘Location’, URL);
 res.end();
});


-----------------------------------------------------------------------------

실습 환경 구성
1.정보 입력 폼
2.입력된 정보 확인하기
3.요청 분석하기
4.요청 처리
5.응답 처리하기


var http = require('http');
var querystring = require('querystring');

var movieList = [{ title: '비트곡성', director: '뉴딜' }];

var server = http.createServer(function (req, res) {
    if (req.method.toLowerCase() == 'post') {
        addNewMovie(req, res);
    }
    // get이면 목록 출력
    else {
        showList(req, res);
    }
});
server.listen(3000);

function showList(req, res) {
    res.writeHeader(200, { 'Content-Type': 'text/html; charset=UTF-8' });
    res.write('<html>');
    res.write('<meta charset="UTF-8">');
    res.write('<body>');

    res.write('<h3>Favorite Movie</h3>');
    res.write('<div><ul>');

    movieList.forEach(function (item) {
        res.write('<li>' + item.title + '(' + item.director + ')</li>');
    }, this);
    res.write('</ul></div>');

    res.write(
        '<form method="post" action="."><h4>새 영화 입력</h4>' +
        '<div><input type="text" name="title" placeholder="영화제목"></div>' +
        '<div><input type="text" name="director" placeholder="감독"></div>' +
        '<input type="submit" value="upload">' +
        '</form>'
        );
    res.write('</body>');
    res.write('</html>');
    res.end();
}

function addNewMovie(req, res) {
    var body = '';
    req.on('data', function(chunk) {
        body += chunk;
    });
    req.on('end', function() {
        var data = querystring.parse(body);
        var title = data.title;
        var director = data.director;
        
        movieList.push({title:title, director:director});
        
        //res.end('Success');
        res.statusCode = 302;
        res.setHeader('Location', '.');
        res.end();
    });
}

--------------------------------------------------------


Node.js POSTMAN 활용하여 실습 해보기|

var http = require('http');

var movieList = [{title:'아바타', director:'제임스 카메론'}];

http.createServer(function (req, res) {
   if ( req.method.toLowerCase() == 'post' ) {
      var buffer = '';
      req.on('data', function (chunk) {
         buffer += chunk;
      });

      req.on('end', function () {
         var parsed = JSON.parse(buffer);
         var titleData = parsed.title;
         var directorData = parsed.director;
         
         movieList.push({title:titleData, director:directorData});
         
         res.writeHead(200, {'Content-Type':'application/json'});
         res.end(JSON.stringify({result:'success'}));         
      });     
   }
   else {
      var result = {
          count : movieList.length,
          data : movieList
      };
      res.writeHead(200, {'Content-Type':'application/json'});
      res.end(JSON.stringify(result));
   }
}).listen(3000);



'개발자 > 20181127 교육과정' 카테고리의 다른 글

nodeJs routing  (0) 2019.01.09
nodeJS express  (0) 2019.01.08
nodeJS http  (0) 2019.01.07
nodeJs npm module  (0) 2019.01.07
nodeJS npm  (0) 2019.01.07