[TIL-30] Node-Express 2

da.circle·2022년 10월 10일
0

TIL

목록 보기
30/44

라우팅이란

라우팅 - 위키백과, 우리 모두의 백과사전

  • 라우팅(routing)은 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정이다.

Express 없이 노드 서버 라우팅하기

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");
});
  • Express 없이 서버를 구현하면 url과 메소드를 정확하게 기입해야하고, return 뒤에 실행할 함수를 작성하면 된다.

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에서 사용하기 위해 모듈로 내보낸다. 

POST로 요청

  • http -v POST localhost:3000/signup

→ 만약 POST 대신 GET으로 요청하면?
http -v GET localhost:3000/signup

⇒ 이렇게 직접 request 객체에서 url과 method를 기준으로 조건문을 사용해서 각각 다른 로직을 처리해야한다.
앱의 규모가 커지게 되면 불편할 수 밖에 없다.

Express로 노드 서버 띄우고 라우팅하기

Express

  • 라우팅과 로직의 모듈화를 위해 사용되는 프레임워크
  • 설치 : 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");
});
  • sendPosts.js
//객체를 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 프레임워크를 사용하는 것이 코드가 간결하고 눈에 더 잘 들어오는 것 같다!

profile
프론트엔드 개발자를 꿈꾸는 사람( •̀ ω •́ )✧

0개의 댓글