클라이언트 요청 처리

»

클라이언트 요청 처리

GET 처리

GET 요청 처리

주소값을 이용해 요청하는 방식으로

서버로 값을 전달하기 위해 주소 끝에 ?를 붙이고 키1=값1&키2=값2 형태로 요청합니다

http://naver.com/Post.nhn?postId=3572432&cafeId=158763

위처럼 [naver.com/Post.nhn](http://naver.com/Post.nhn) 주소로 요청하게 되는데 서버측에서는 ?다음의 값들을 변수와 값의 형태로 받아서 사용하게 됩니다. 이렇게 실제 주소값 뒤에 붙어가는 값을 Query String 이라고 합니다

Query String 은 주소형태로 요청할 수도 있고 HTML에 있는 form 태그를 사용해서 요청할 수도 있습니다

밑에는 서버측에서 Query String을 처리하는 코드입니다

// http 모듈 불러오기
let http = require("http");

// url 모듈 불러오기
let url = require("url");
// querystring 모듈 불러오기
let querystring = require("querystring");

// 서버 생성
let server = http.createServer(function (request, response) {
  // 콘솔화면에 로그 시작 부분을 출력
  console.log("--- log start ---");
  // 브라우저에서 요청한 주소를 parsing 하여 객체화 후 출력
  let parsedUrl = url.parse(request.url);
  console.log(parsedUrl);
  // 객체화된 url 중에 Query String 부분만 따로 객체화 후 출력
  let parsedQuery = querystring.parse(parsedUrl.query, "&", "=");
  console.log(parsedQuery);
  // 콘솔화면에 로그 종료 부분을 출력
  console.log("--- log end ---");

  // 반환값 넘겨주기
  response.writeHead(200, { "Content-Type": "text/html" });
  response.end("Hello node.js!!");
});

// 서버 실행
server.listen(8080, function () {
  console.log("Server is running...");
});

GET 요청

브라우저에 다음과 같이 입력해서 서버로 요청해보겠습니다

http://localhost:5001/?var1=newData&var2=153&var3=testdata2017

그러면 CMD에 다음과 같은 로그가 나타납니다

--- log start ---
// 1. 이부분이 let parsedUrl = url.parse(주소) 함수로 주소값을 객체화 한 부분입니다.
//    객체화 되기 때문에 parsedUrl.search 형태로 객체 내부의 변수값을 사용할 수 있습니다.
//    아래에서는 객체 내부의 query 라는 변수값을 가져와서 다시 객체화 합니다.
Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?var1=newData&var2=153&var3=testdata2017',
  query: 'var1=newData&var2=153&var3=testdata2017',
  pathname: '/',
  path: '/?var1=newData&var2=153&var3=testdata2017',
  href: '/?var1=newData&var2=153&var3=testdata2017' 
}

// 2. 이 부분이 let parsedQuery = querystring.parse(parsedUrl.query,'&','=')
//    역시 위의 parsedUrl 객체에서 query 라는 변수값을 다시 querystring 으로 parsing 하여 객체화하였습니다.
//    해당 객체는 parsedQuery.var1 형태로 객체내부의 값을 사용할 수 있게 됩니다. 
{ var1: 'newData', var2: '153', var3: 'testdata2017' }
--- log end ---

요청값 돌려주기

전달받은 값을 브라우저로 다시 전달해서 화면에 출력해보겠습니다

response.end 함수안에 값을 수정한뒤 서버를 다시 실행해보겠습니다

response.end('let1의 값은 '+parsedQuery.var1);

let1�섍컪=undefined, let2�섍컪=undefined, let3�섍컪=undefined 요따구로 나오게 화면에 출력됩니다


POST 처리

POST는 GET처럼 주소 끝에 query를 다는 것과는 달리 요청 BODY 에 담아서 서버측에 요청합니다

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

let server = http.createServer(function(request,response){
  // 1. post로 전달된 데이터를 담을 변수를 선언
  let postdata = '';
  // 2. request객체에 on( ) 함수로 'data' 이벤트를 연결
  request.on('data', function (data) {
    // 3. data 이벤트가 발생할 때마다 callback을 통해 postdata 변수에 값을 저장
    postdata = postdata + data;
  });

  // 4. request객체에 on( ) 함수로 'end' 이벤트를 연결
  request.on('end', function () {
    // 5. end 이벤트가 발생하면(end는 한버만 발생한다) 3번에서 저장해둔 postdata 를 querystring 으로 객체화
    let parsedQuery = querystring.parse(postdata);
    // 6. 객체화된 데이터를 로그로 출력
    console.log(parsedQuery);
    // 7. 성공 HEADER 와 데이터를 담아서 클라이언트에 응답처리
    response.writeHead(200, {'Content-Type':'text/html'});
    response.end('var1의 값 = ' + result);
  });

});

server.listen(8080, function(){
    console.log('Server is running...');
});

포스트맨을 사용해서 보내고 싶은 키와 값을 입력해서 보냅니다