2021_05_03

유지원·2021년 5월 3일
0
post-thumbnail

TIL - Chatterbox Server

1. Chatterbox Server

오늘은 저번 시간에 이어서 Chatterbox의 서버 부분을 구현했다.

1. 서버생성

const http = require('http');
const server = http.createServer(requestHandler);

createServer를 이용해서 서버를 생성한다.
이 서버로 오는 HTTP 요청마다 http.createServer가 한 번씩 실행된다.

const requestHandler = function (request, response) {
	~~~
    ~~~
}

createServer에 담기는 콜백함수이다. 항상 request, response를 인자로 받으며 이 함수 안에서는 항상 요청과 응답이 동반 되어야 한다.

2. 요청 분기하기

if(request.method === 'GET' && request.url === '/messages'){
	~~
}
else if(request.method === 'POST' && request.url === '/messages') {
	~~~
}
else { //요청이 잘못 되었을 때 
	~~~
}

메서드와 url 조건을 분기하여 각각 조건을 생성한다.

3. 조건에 맞는 요청 작성하기

if(request.method === 'GET' && request.url === '/messages') {
    response.writeHead(200, defaultCorsHeaders); // 헤더를 변경한다. 
    response.end(JSON.stringify(allMessages)); // 메시지를 JSON 형태로 변환하여 응답한다.
  }
  else if(request.method === 'POST' && request.url === '/messages') {
    let body = [];
    request.on('data', (chunk) => {
      body.push(chunk); //데이터를 배열에 저장한다.
    })
    .on('end', () => { //데이터를 모두 받아왔으면
      body = Buffer.concat(body).toString(); //Buffer에 데이터 조각조각을 저장하고 문자열 형태로 바꾼다.
      body = JSON.parse(body); //JSON 형태로 바꾼다.
      response.writeHead(201, defaultCorsHeaders); //헤더를 변경한다.
      allMessages.results.push(body); //results 라는 키의 값으로 body를 넣는다.
      response.end(JSON.stringify(allMessages));  //메시지를 JSON 형턔로 변환하여 응답한다.
    })
    else { //요청이 잘못 되었을 때 
    response.statusCode = 404; // 404 요청코드를 보낸다.
    response.end();
  }
  }

4. CORS 요청 허용하기

if(request.method === 'OPTIONS') { //CORS 상황이 생겼을 때 
    response.writeHead(200, defaultCorsHeaders); //CORS 허용할 수 있도록 defaultCorsHeaders를 실행한다.
    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 //CORS 요청을 10초동안 유지한다.
};




이번시간에는 서버를 직접 구현해보는 시간을 가졌다.
다음시간에는 chatterbox server를 express를 이용해서 구현해본다
오늘은 여기까지~!~!

profile
안녕하세요 유지원입니다

0개의 댓글