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 미들웨어를 더 깔끔하게 사용할 수 있습니다.
'자기계발' 카테고리의 다른 글
VSCODE PowerShell 자동완성 기능 (1) | 2024.10.22 |
---|---|
OAuth2.0의 개념 (0) | 2024.10.18 |
HTTP와 HTTPS의 차이점과 보안 메커니즘 이해하기 (0) | 2024.10.15 |
React 미니 프로젝트 (0) | 2024.09.30 |
React Developer Tools를 활용한 React 애플리케이션 성능 최적화 (1) | 2024.09.28 |