Immersive#12 chatterbox server

TheJang·2020년 4월 26일
0

TIL

목록 보기
32/33

이번 스프린트는 mini-server에 이어 server에 관련된 스프린트입니다. 앞서 chatterbox-client를 만들었는데 이를 server로 처리하는 과정입니다. 서버를 직접 만들고 API를 어떤식으로 처리해야 하는 지 배워 보았습니다.

< 배운 것들 >

  • server API작성
  • nodemon의 활용
  • postman의 사용

// request-handler.js

const results = {
  results: []
};
const requestHandler = function(request, response) {
  
  console.log(
    "Serving request type " + request.method + " for url " + request.url
  );

  console.log("req.url", request.url, "req.method", request.method);

  // 응답을 위한 status 코드입니다.
  const statusCode = 200;

  const headers = defaultCorsHeaders;

  // 응답 헤더에 응답하는 컨텐츠의 자료 타입을 헤더에 기록 합니다.
  headers["Content-Type"] = "application/json";

  // .writeHead() 메소드는 응답 헤더에 해당 key, value 를 적어줍니다.
  response.writeHead(statusCode, headers);

  if (request.method === "OPTIONS") {
    response.writeHead(statusCode, defaultCorsHeaders);
    response.end();
  } else if (request.method === "GET") {
    if (request.url === "/classes/messages") {
      const data = JSON.stringify(results);
      response.end(data);
    } else {
      status = 404;
      response.writeHead(status, defaultCorsHeaders);
      response.end();
    }
  } else if (request.method === "POST") {
    if (request.url === "/classes/messages") {
      let body = "";
      status = 201;
      response.writeHead(status, defaultCorsHeaders);
      request
        .on("data", chunk => {
          body += chunk;
        })
        .on("end", () => {
          const data = JSON.parse(body); // body 객체 -> data를 json.parse를 통해 사용 할 수 있게 만들어준다.
          results.results.push(data);
          response.end(JSON.stringify(data)); // 
        });
    } else {
      status = 404;
      response.writeHead(status, defaultCorsHeaders);
      response.end();
    }
  } else {
    status = 404;
    response.writeHead(status, defaultCorsHeaders);
    response.end();
  }
  // 노드 서버에 대한 모든 요청은 응답이 있어야 합니다. response.end 메소드는 요청에 대한 응답을 보내줍니다.
};

Post API를 작성 하는데에 있어서 const data = JSON.parse(body); -> body를 다시 json.parse를 해서 사용 해야하는게 이해가 잘 안됐습니다. 여기 부분에서 많이 막히고 힘들었지만 req의 body가 json.stringify로 오기 때문에 이를 json.parse하고 다시 데이터를 보내 줄 때에는 data를 json.stringify로 이해 해 문제를 넘겼습니다.

profile
어제보다 오늘 더 노력하는 프론트엔드 개발자

0개의 댓글