Javascript를 배우고 있습니다. 매일 배운 것을 이해한만큼 정리해봅니다.
Node.js : Chrome V8 자바스크립트 엔진으로 만든(compile) 자바스크립트의 런타임
이벤트 기반 논블로킹 I/O 모델: 유저가 버튼 클릭 등을 발생시켜 네트워크에 리소스를 요청하는 이벤트가 생길 때, 페이지 내 다른 기능과 상관 없이 비동기적으로 input을 보내고 output을 받는 모델
CORS: Cross Origin Resource Sharing
HTTP Method: OPTIONS
어제 채팅방 형식의 client service를 만든 것에 이어 오늘은 node.js로 작은 규모의 로컬 server를 구축했다. 어제 만들었던 client의 server side 구축을 위한 예습? 정도였다.
(예습이지만 node.js 공식 문서 보고 이해하고 작성하느라 엄청 헤맴 ㅜㅜ)
client에서 문자를 적고 대문자로 혹은 소문자로 바꾸는 버튼 중 하나를 눌렀을 때 client에서 request를 보내고 server는 response를 해당하는 문자 형태로 변경하여 보내주는 형식의 인터페이스였다.
중점적으로 진행했던 부분
고전했던 부분
Code Review
const http = require("http");
const PORT = 5000;
const ip = "localhost";
const defaultCorsHeader = {
"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
};
const server = http.createServer((request, response) => {
let headers = defaultCorsHeader;
const { method, url } = request;
let body = [];
//1. OPTIONS -> 204 status
if (method === "OPTIONS") {
response.writeHead(204, headers);
response.end();
}
//2. POST이면서 upper거나 lower이면
else if (method === "POST" && (url === "/upper" || url === "/lower")) {
request
.on("error", err => {
console.error(err);
})
.on("data", chunk => {
body.push(chunk);
})
//2-1. upperCase -> 대문자로 만들어서 파싱 200 status
.on("end", () => {
if (url === "/upper") {
body = Buffer.concat(body)
.toString()
.toUpperCase();
}
//2-2. lowerCase -> 소문자로 만들어서 파싱 200 status
else if (url === "/lower") {
body = Buffer.concat(body)
.toString()
.toLowerCase();
}
//2-3. 값 자체가 빈 칸으로 들어오면? 400 에러
if (body[2] === undefined) {
response.writeHead(400, headers);
response.end("eror");
}
response.writeHead(200, headers);
response.end(JSON.stringify(body));
});
} //3. another request -> 400 에러
else {
response.writeHead(400, headers);
response.end("eror");
}
response.on("error", err => {
console.error(err);
});
console.log(
`http request method is ${request.method}, url is ${request.url}`
);
})