2021_05_03

11850 ワード

TIL - Chatterbox Server


1. Chatterbox Server


今日は次のレッスンでChatterboxのサーバ部分を実現しました.
1.サーバの作成
const http = require('http');
const server = http.createServer(requestHandler);
createServerを使用してサーバを作成します.
各HTTP要求はこのサーバに対して行われる.createServerは1回ずつ実行されます.
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초동안 유지한다.
};
このレッスンでは、サーバを直接実装する時間があります.
次のレッスンではexpressを使用してchatterboxserverを実装します
今日はここまで~!~!