Express.js
CR
GET
//file Data GET
app.get("/posts", async (req, res) => {
res.json(posts); //JSONํ์์ผ๋ก ์๋ต๋ณด๋ด๊ธฐ
});
app.get("/posts/:postId", (req, res) => {
const postId = req.params.postId;
const post = posts.find((post) => post.id === Number(postId));
res.json(post);
});
//axios๋ก GET
app.get("/todos", async (req, res) => {
const response = await axios.get(
"https://jsonplaceholder.typicode.com/todos"
);
const data = response.data;
res.json(data);
});
POST
import express from "express";
import bodyParser from "body-parser";
const app = express();
const port = 5555;
// JSON ํ์์ ์์ฒญ ๋ณธ๋ฌธ์ ํด์ํ๊ธฐ ์ํ ๋ฏธ๋ค์จ์ด ์ค์
app.use(bodyParser.json());
app.post("/posts", (req, res) => {
console.log(req.body); // ์์ฒญ์ ๋ณธ๋ฌธ(body)์ ์ฝ์์ ์ถ๋ ฅ
res.send(); // ์๋ต ๋ณด๋ด๊ธฐ
});
app.listen(port, () => {
console.log("listening");
});
โ๏ธExpress์์ POST ์์ฒญ์ ๋ณธ๋ฌธ(body)์ ์ฝ๊ธฐ ์ํด์๋ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๐๐ป body-parser
POST
import fs from "fs/promises";
import { v4 as uuid } from "uuid";
// ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์จ ์์ฒญ(req)์ body์์ `title`๊ณผ `body`๋ฅผ ์ถ์ถํฉ๋๋ค.
const { title, body } = req.body;
// ๊ธฐ์กด์ ํฌ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด `await` ํค์๋๋ฅผ ์ฌ์ฉํ๊ณ ,
// ํ์ผ์ ๊ฒฝ๋ก๋ "./src/data/posts.json"์ด๋ฉฐ, ์ธ์ฝ๋ฉ์ UTF-8๋ก ์ค์ ํฉ๋๋ค.
const posts = await fs
.readFile("./src/data/posts.json", {
encoding: "utf-8",
})
.then((text) => JSON.parse(text));
// ์๋ก์ด ํฌ์คํธ๋ฅผ ์์ฑํฉ๋๋ค. `uuid()` ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ํ ID๋ฅผ ์์ฑํ๊ณ ,
// ์์ฒญ์ body์์ ๋ฐ์ `title`๊ณผ `body`๋ฅผ ์ฌ์ฉํฉ๋๋ค.
const newPost = {
id: uuid(),
userId: 1, // ์์๋ก 1์ ๊ณ ์ ์ผ๋ก ์ฌ์ฉ
title,
body,
};
// ์๋ก์ด ํฌ์คํธ๋ฅผ ๊ธฐ์กด ํฌ์คํธ ๋ฐฐ์ด์ ์ถ๊ฐํฉ๋๋ค.
posts.push(newPost);
// ํฌ์คํธ ๋ฐฐ์ด์ JSON ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค.
const stringifiedNewPosts = JSON.stringify(posts);
// ์
๋ฐ์ดํธ๋ ํฌ์คํธ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์๋๋ค. ํ์ผ์ ๊ฒฝ๋ก๋ "./src/data/posts.json"์ด๋ฉฐ,
// ์ธ์ฝ๋ฉ์ UTF-8๋ก ์ค์ ํฉ๋๋ค. ์ด ๋, `await` ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ฉฐ,
// ์์
์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ๋ฅผ `result` ๋ณ์์ ์ ์ฅํฉ๋๋ค.
const result = await fs.writeFile(
"./src/data/posts.json",
stringifiedNewPosts,
{ encoding: "utf-8" }
);
// ์๋ต์ ๋ณด๋
๋๋ค.
res.send();
PUT
app.put("/posts/:postId", async (req, res) => {
let postId: string | number = req.params.postId;
postId = isNaN(Number(postId)) ? postId : Number(postId);
const { title, body } = req.body;
//๊ธฐ์กด ํ์ผ์ ๊ฐ์ ธ์ด
const posts = await fs
.readFile("./src/data/posts.json", {
encoding: "utf-8",
})
.then((text) => JSON.parse(text) as Post[]);
//(id) ๋ณ๊ฒฝํ ํฌ์คํธ ์ฐพ์์ ์
๋ฐ์ดํธ
posts.forEach((post) => {
if (post.id === postId) {
post.title = title;
post.body = body;
}
});
//JSON์ผ๋ก ๋ณํํด์ writeํ๊ธฐ
const stringifiedNewPosts = JSON.stringify(posts);
await fs.writeFile("./src/data/posts.json", stringifiedNewPosts, {
encoding: "utf-8",
});
//๋ณ๊ฒฝํ ํฌ์คํธ send
res.send(postId);
});
DELETE
app.delete("/posts/:postId", async (req, res) => {
//postId ๊ฐ์ ธ์ค๊ธฐ
let postId: string | number = req.params.postId;
//nanoId๋ ๊ฐ์ด ์ฌ์ฉํ ๊ฒ์ด๊ธฐ๋๋ฌธ์, (์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ทธ๋๋ก ์ฌ์ฉ ์ซ์๋ ์ซ์๋ก)
postId = isNaN(Number(postId)) ? postId : Number(postId);
//ํ์ผ์์ ํฌ์คํธ ๋ฐฐ์ด ์ฝ์ด์ค๊ธฐ
const posts = await fs
.readFile("./src/data/posts.json", {
encoding: "utf-8",
})
.then((text) => JSON.parse(text) as Post[]);
//์ญ์ ํ ํฌ์คํธ ๊ฑธ๋ฌ์ ํฌ์คํธ ๋ชฉ๋ก ๋ง๋ค๊ธฐ
const newPosts = posts.filter((post) => post.id !== postId);
//์๋ก์ด ํฌ์คํธ ๋ฐฐ์ด์ JSON ํ์์ผ๋ก ๋ณํ
const stringfiedNewPosts = JSON.stringify(newPosts);
//์ญ์ ํ๊ณ ๋ฐ๋ ํฌ์คํธ ๋ฐ์ดํฐ ํ์ผ์ ์ฐ๊ธฐ
await fs.writeFile("./src/data/posts.json", stringfiedNewPosts, {
encoding: "utf-8",
});
//์ญ์ ๋ postId ์๋ต์ผ๋ก ๋ณด๋ด๊ธฐ
res.json(postId);
});
ํด๋น id์ post ์ญ์ ํ ์๋ต์ผ๋ก ์ญ์ ๋ ์์ด๋๋ฅผ ์๋ต์ผ๋ก ๋ณด๋ธ๋ค.