withoutExpress.js
const http = require("http");
const { sendPosts } = require("./sendPosts");
const server = http.createServer((req, res) => {
//요청(request)로부터 url과 method 키워드를 받아온다.
console.log("request : ", req);
const { url, method } = req;
res.setHeader("Content-Type", "application/json");
//만약 url이 / 로 끝나면 응답으로 " / endpoint" 라는 문구를 전달
if (url === "/") return res.end(JSON.stringify({ message: "/ endpoint" }));
//만약 url이 /signup 으로 끝나고 http메소드가 POST면 응답으로 "회원가입 완료!"라는 문구를 전달
if (url === "/signup" && method === "POST")
return res.end(JSON.stringify({ message: "회원가입 완료!" }));
//만약 url이 /login으로 끝나고 http메소드가 POST면 응답으로 "로그인 완료!" 라는 문구를 전달
if (url === "/login" && method === "POST")
return res.end(JSON.stringify({ message: "로그인 완료!" }));
//만약 url이 /products로 끝나고 http메소드가 GET이면 sendPost라는 함수를 호출
if (url === "/products" && method === "GET") return sendPosts(res);
res.end(
JSON.stringify({ message: "This response answers to every request" })
);
});
server.listen(3000, () => {
console.log("server is running on PORT 3000");
});
sendPosts.js
const sendPosts = (res) => {
res.end(
JSON.stringify({
products: [
{
id: 1,
title: "node",
description: "node is awesome",
},
{
id: 2,
title: "express",
description: "express is a server-side framework for node.js",
},
],
})
);
};
module.exports = { sendPosts };
//withoutExpress.js에서 사용하기 위해 모듈로 내보낸다.
http -v POST localhost:3000/signup
→ 만약 POST 대신 GET으로 요청하면?
http -v GET localhost:3000/signup
⇒ 이렇게 직접 request 객체에서 url과 method를 기준으로 조건문을 사용해서 각각 다른 로직을 처리해야한다.
앱의 규모가 커지게 되면 불편할 수 밖에 없다.
npm install express --save
withExpress.js
→ 위의 withoutExpress.js와 같은 결과가 나오는 코드
const http = require("http");
const express = require("express");
const { sendPosts } = require("./sendPosts");
const app = express();
app.get("/", (req, res) => {
res.json({ message: "/ endpoint" });
});
const handleSignUp = (req, res) => {
res.json({ message: "회원가입 완료!" });
};
const handleLogin = (req, res) => {
res.json({ message: "로그인 완료!" });
};
app.post("/signup", handleSignUp); // 첫번째 인자 : endpoint url
app.post("/login", handleLogin); //두번째 인자 : 각각의 요청에 대해 핸들링 하는 함수
app.post("/products", sendPosts);
const server = http.createServer(app);
server.listen(3000, () => {
console.log("server is listening on PORT 3000");
});
//객체를 JSON 형태로 변환해서 전달하는 함수
const sendPosts = (req, res) => {
res.json({
products: [
{
id: 1,
title: "node",
description: "node.js is awesome",
},
{
id: 2,
title: "express",
description: "express is a server-side framework for node.js",
},
],
});
};
module.exports = { sendPosts };
//withExpress.js에서 사용하기 위해 모듈로 내보낸다.
처음에 Express 없이 서버를 만들고 라우팅해보니
확실히 Express 프레임워크를 사용하는 것이 코드가 간결하고 눈에 더 잘 들어오는 것 같다!