Javascript를 배우고 있습니다. 매일 배운 것을 이해한만큼 정리해봅니다.
오늘은 이틀 전 Fetch API를 이용해 만들었던 'chatter box'라는 채팅 클라이언트의 서버를 구축했다. 이로써 클라이언트 사이드와 서버 사이드를 양쪽으로 구현해보면서 http transaction을 손으로 쳐보고 눈으로 확인해볼 수 있었다.
내일은 드디어 express를 이용한 리팩토링을 진행할 예정이다.
서버 사이드.... 어려운데 한 번 깨우치고 나면 정말 재미있다ㅎ
중점적으로 익힌 내용
고전했던 부분
Routing, Stream객체, Buffer, Chunk 개념 정리
let body = "";
request.on("data", chunk
=> {body += chunk;})
.on("end", ()
=> { //data storage에 추가
});
let body = [];
request.on("data", chunk
=> {body.push(chunk);})
.on("end", ()
=> { //data stroage에 추가
});
JSON 처리 관련 에러
uncaught(in promise) SyntaxError: unexpected token...
let { chats, idNum } = require("./data.js");
const requestHandler = function(request, response) {
const { method, url } = request;
let body = [];
let date;
console.log("Serving request type " + request.method + " for url " + request.url);
let statusCode = 200;
let newChat = {};
const headers = defaultCorsHeaders;
// 응답 헤더에 응답하는 컨텐츠의 자료 타입을 헤더에 기록
headers["Content-Type"] = "text/plain";
if (method === "OPTIONS" && url === "/classes/messages") {
//CORS pre flight 확인
statusCode = 204;
response.writeHead(statusCode, headers);
response.end();
} else if (method === "GET" && url === "/classes/messages") {
// get 대응
request.on("error", err => {
console.err(err);
});
response.on("error", err => { console.err(err);});
statusCode = 200;
response.writeHead(statusCode, headers);
response.end(JSON.stringify(chats));
} else if (method === "POST" && url === "/classes/messages") {
// post 대응
request
.on("error", err => {console.err(err);})
.on("data", chunk => {
body.push(chunk);
date = JSON.stringify(new Date());
})
.on("end", () => {
newChat = JSON.parse(Buffer.concat(body).toString());
idNum++;
newChat["id"] = idNum;
newChat["date"] = date;
chats.results.push(newChat);
console.log(newChat);
});
response.on("error", err => {console.error(err);});
statusCode = 201;
response.writeHead(statusCode, headers);
response.end(JSON.stringify({ id: idNum }));
} else {
//get, post, options 아닐 때 대응
statusCode = 404;
response.writeHead(statusCode, headers);
response.end("error");
}
}