이번 스프린트는 mini-server에 이어 server에 관련된 스프린트입니다. 앞서 chatterbox-client를 만들었는데 이를 server로 처리하는 과정입니다. 서버를 직접 만들고 API를 어떤식으로 처리해야 하는 지 배워 보았습니다.
< 배운 것들 >
// 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
로 이해 해 문제를 넘겼습니다.