본문 바로가기

자기계발

Node.js서버코드를 express 서버로 바꾸기 예제

node.js 서버코드

// server.js

const express = require("express");
const cors = require('cors')


// CORS 설정을 위한 헤더
const headers = {
  "Access-Control-Allow-Origin": "http://127.0.0.1:9000",
  "Access-Control-Allow-Methods": "OPTIONS, POST, GET, PUT, DELETE",
  "Access-Control-Allow-Headers": "Content-Type",
};

let data = { message: "여러분 화이팅!" };

const server = http.createServer((req, res) => {
  if (req.method === "OPTIONS") {
    res.writeHead(204, headers);
    res.end();
    return;
  }

  if (req.method === "GET") {
    res.writeHead(200, { "Content-Type": "application/json", ...headers });
    res.end(JSON.stringify(data));
  }

  if (req.method === "POST") {
    let body = "";
    req.on("data", (chunk) => {
      body += chunk.toString();
    });

    req.on("end", () => {
      data.message = body;
      res.writeHead(200, headers);
      res.end(`받은 POST 데이터: ${body}`);
    });
  }

  if (req.method === "PUT") {
    let body = "";
    req.on("data", (chunk) => {
      body += chunk.toString();
    });

    req.on("end", () => {
      data.message = body;
      res.writeHead(200, headers);
      res.end(`업데이트된 데이터: ${body}`);
    });
  }

  if (req.method === "DELETE") {
    data = {};
    res.writeHead(200, headers);
    res.end("데이터가 삭제되었습니다.");
  }
});

server.listen(3000, () => {
  console.log("서버가 http://localhost:3000/ 에서 실행 중입니다.");
});

 

express서버코드

// server.js
const express = require("express");
const cors = require("cors");

const app = express();

let data = { message: "여러분 화이팅!" };

// CORS 설정을 위한 헤더
app.use(
  cors({
    origin: "http://127.0.0.1:9000",
    methods: ["OPTIONS", "POST", "GET", "PUT", "DELETE"],
    headers: { "Content-Type": "application/json" },
  })
);

app.use(express.json());
app.use(express.text());

app.options("/", (req, res) => {
  //res.writeHead(204, headers);
  return res.send();
});

app.get("/", (req, res) => {
  //res.writeHead(200, { "Content-Type": "application/json", ...headers });
  return res.json(data);
});

app.post("/", (req, res) => {
  data.message = req.body;
  //res.writeHead(200, headers);
  return res.send(`받은 POST 데이터: ${req.body}`);
});

app.put("/", (req, res) => {
  data.message = req.body;
  //res.writeHead(200, headers);
  return res.send(`업데이트된 데이터: ${req.body}`);
});

app.delete("/", (req, res) => {
  data = {};
  //res.writeHead(200, headers);
  res.send("데이터가 삭제되었습니다.");
});

app.listen(3000, () => {
  console.log("서버가 http://localhost:3000/ 에서 실행 중입니다.");
});

 

  • cors() 미들웨어:
    • Access-Control-Allow-Headers를 headers: { "Content-Type": "application/json" }로 설정하셨는데, 이 부분은 CORS 요청에 대해 유연하게 처리되도록 기본 설정을 이용하는 것이 더 나을 수 있습니다. 즉, 명시적인 headers 설정을 생략하고 기본값을 사용하는 것이 좋다.
  • options 메서드 처리:
    • app.options("/", (req, res)에서 직접적으로 OPTIONS 요청을 처리하고 있습니다. 하지만 cors 미들웨어가 이 작업을 자동으로 처리해주기 때문에 따로 정의하지 않아도 됩니다. 이 부분은 삭제해도 무방.
  • POST, PUT 데이터 처리:
    • app.post()와 app.put()에서 req.body를 처리하는 방식이 잘 되어 있지만, req.body는 이미 express.json() 미들웨어에 의해 자동으로 파싱됩니다. 현재 코드에선 이를 제대로 활용하고 있으니 문제없음.

 

// server.js
const express = require("express");
const cors = require("cors");

const app = express();

let data = { message: "여러분 화이팅!" };

// CORS 설정을 위한 미들웨어
app.use(cors({
  origin: "http://127.0.0.1:9000",
  methods: ["OPTIONS", "POST", "GET", "PUT", "DELETE"],
}));

app.use(express.json());  // JSON 데이터 파싱
app.use(express.text());  // Text 데이터 파싱

// GET 요청 처리
app.get("/", (req, res) => {
  return res.json(data);
});

// POST 요청 처리
app.post("/", (req, res) => {
  data.message = req.body;
  return res.send(`받은 POST 데이터: ${req.body}`);
});

// PUT 요청 처리
app.put("/", (req, res) => {
  data.message = req.body;
  return res.send(`업데이트된 데이터: ${req.body}`);
});

// DELETE 요청 처리
app.delete("/", (req, res) => {
  data = {};
  res.send("데이터가 삭제되었습니다.");
});

// 서버 실행
app.listen(3000, () => {
  console.log("서버가 http://localhost:3000/ 에서 실행 중입니다.");
});

이렇게 수정하면 불필요한 OPTIONS 처리 로직도 제거하고, cors 미들웨어를 더 깔끔하게 사용할 수 있습니다.