node.js를 이용한 http서버 구현

Judo·2021년 1월 11일
0

코드 스테이츠 스프린트 내용이라 코드 설명은 따로 없다. 어려웠던 점, 해결한 과정등을 위주로 작성한다.

//basic-server.js
const http = require("http");//http 모듈을 불러온다.
const requestHandler = require("./request-handler") //requestHandler를 불러온다.

const port = 5000;
const ip = "127.0.0.1";


const server = http.createServer(requestHandler);

server.listen(port, ip);

module.exports = server;


//request-handler.js
/*************************************************************
request handler 함수를 여기서 작성합니다.
reuqestHandler 함수는 이미 basic-server.js 파일에서 사용 했지만, 아직 작동하지 않습니다.
requestHandler 함수를 export 하여 basic-server.js 에서 사용 할 수 있게 하세요
**************************************************************/
//const fs = require('fs');


let resultObj = {
  results : []
};

const requestHandler = function (request, response) {

  const headers = defaultCorsHeaders;
  headers["Content-Type"] = "application/json";// 통신할 때 사용할 데이터 타입을 적어준다.
  
  //writeHead() 메소드의 두 번째 인자로는 응답 헤더와 키와 값을 객체 형태로 적어준다.
  response.writeHead(200, headers);

  if (request.method === 'OPTIONS') { //preflight request 인 경우 
    response.writeHead(200, defaultCorsHeaders);
    response.end();
  } else if (request.method === 'GET') { 
    if (request.url === '/messages') { 
      const data = JSON.stringify(resultObj);
      response.end(data);
    } else {
      response.writeHead(404, headers);
      response.end();
    } 
  } else if (request.method === "POST") {
    if (request.url === '/messages') {
      let body = "";
      response.writeHead(201, headers);
      request
        .on('data', chunk => { //chunk는 데이터 조각
          body = body + chunk;
        })
        .on('end', () => {
          //console.log(body);//'{"username": "김코딩", "text": "안녕하세요333"}' => JSON 문자열
          const data = JSON.parse(body);//JSON 문자열로 들어온 데이터를 JS값으로 변환 
          //console.log(data); //{username: '김코딩', text: '안녕하세요333'} => 객체로 변환
          resultObj.results.push(data);
          response.end(JSON.stringify(data));
        });
    } else { //POST, messages 로 요청이 들어오지 않았을 떄
      response.writeHead(404, headers);
      response.end();
    }  
  } else {
    response.writeHead(404, headers);
    response.end();
  }

};

const defaultCorsHeaders = {
  "access-control-allow-origin": "*",
  "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
  "access-control-allow-headers": "content-type, accept",
  "access-control-max-age": 10 // Seconds.
};
module.exports = requestHandler;


어려웠던 점


  • POST 요청을 받았을 때 데이터를 저장하는 과정에서 const data = JSON.parse(body); 이 코드가 나를 힘들게 했다. 내가 알고 있었던 JSON을 이용한 통신은 데이터를 저장할 때 JSON 형식으로 저장하고 가져올 때 JSON.parse()를 이용해 가져온다고 생각했다. 그렇기 때문에 위 코드처럼 POST요청으로 들어온 데이터를 다시 JSON.parse() 처리를 한 후 저장하는게 이상하다고 생각했다.

해결한 부분


JSON 객체를 위한 형식 => JS 객체로 저장

JSON을 언어에 맞게 저장한다.
자바스크립트인 경우 JSON.parse()
자바인 경우 어떤 메소드..

예를 들자면 물류창고에 물건들이 포장되어 모이면 물건들의 포장을 풀고 저장을 하고 이후 택배 회사들이 각자 회사의 상자를 가지고 다시 포장하여 배송하는 것을 말한다.

저장, 데이터 이동 과정 : JSON 타입

대안: NOSQL

http -> json형식으로 준다.

profile
즐거운 코딩

0개의 댓글