๐ซฅ๋น ๊ฐ์ฒด๋ truthy
๋ก๊ทธ์ธ์ ๊ตฌํํ๊ธฐ ์ํด loginUser = {}
๋ก ์ ์ธํ๊ณ ๋ก์ง์ ์์ฑํ์๋ค.
if (loginUser) {
if (loginUser.password === password) {
...
} else {
res.status(401).json({ message: "๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค" });
}
} else {
res.status(401).json({ message: "์กด์ฌํ์ง ์๋ ์์ด๋์
๋๋ค" });
}
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด, ๋น๋ฐ๋ฒํธ๋ ๋ง๊ณ ์์ด๋๋ ํ๋ฆฌ๊ฒ ์์ฒญ์ ๋ณด๋ด๋ ๋ฌด์กฐ๊ฑด "๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค"๋ผ๋ ๋ฉ์์ง๊ฐ ๋์จ๋ค.
loginUser
์ ์ด๊ธฐ๊ฐ์ด {}
(๋น ๊ฐ์ฒด)๋ก ์ค์ ๋์ด ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น ๊ฐ์ฒด๋ ๋ฌด์กฐ๊ฑด truthy๋ก ํ๊ฐ๋๊ธฐ ๋๋ฌธ์, ์๋ ์กฐ๊ฑด์ ๋ฌด์กฐ๊ฑด ์ฐธ์ด ๋๋ค.
if (loginUser) // ํญ์ true!
์ด๋ก ์ธํด ํ๋ฆฐ ์์ด๋์ฌ๋ ํญ์ ์ฒซ ๋ฒ์งธ ๋ถ๊ธฐ๋ฌธ์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋์ด, ์์ฒญ๊ฐ์ ์๊ด์์ด "๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค"๋ผ๋ ์๋ชป๋ ์๋ต์ ์ฃผ๋ ๊ฒ์ด๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- loginUser์ null๋ก ์ด๊ธฐํํ๊ธฐ: ์ด๊ธฐ๊ฐ์ null๋ก ์ค์ ํ์ฌ ์กด์ฌํ์ง ์๋ ์ฌ์ฉ์์ ๋ํ ์ ํํ ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์๋ค.
- ๋น ๊ฐ์ฒด์์ ํ๋ณํ๋ ๋ก์ง ์ถ๊ฐํ๊ธฐ: ๊ฐ์ฒด๊ฐ ๋น์ด ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ํํ ์กฐ๊ฑด ๊ฒ์ฌ๋ฅผ ์ํํ๋ค.
- lodash : isEmpty ์ฌ์ฉ
๋น ๊ฐ์ฒด๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ-Object.keys()
Object.keys()
๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ์ด๋ฆ๋ค์ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. ๋น ๊ฐ์ฒด์ธ์ง ํ์ธํ๊ธฐ ์ํด์๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ฒดํฌํ๋ฉด ๋๋ค.
const obj1 = {};
const obj2 = { message: "not empty" };
console.log(Object.keys(obj1));
console.log(Object.keys(obj2));
const obj1 = {};
const obj2 = { message: "not empty" };
const num = 1;
const str1 = "one";
const str2 = "";
console.log(Object.keys(obj1).length === 0); //true
console.log(Object.keys(obj2).length === 0); //false
console.log(Object.keys(num).length === 0); //true
console.log(Object.keys(str1).length === 0); //false - ๋ฌธ์์ด๋ ๊ฐ์ฒด์ฒ๋ผ ๋์
console.log(Object.keys(str2).length === 0); //true
๋ฒ์ฉ์ ์ธ isEmpty
ํจ์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ ์๋ ์๋ค. ๊ฐ์ฒด ํ์
์ ๋จผ์ ํ์ธํ์ฌ ๋น ๊ฐ์ฒด์ธ์ง ํ์ธํ๋ ํจ์์ด๋ค.
function isEmpty(obj) {
if (obj.constructor === Object) {
if (Object.keys(obj).length === 0) {
return true;
} else {
return false;
}
} else {
return false;
}
}
console.log(isEmpty(obj1));
console.log(isEmpty(obj2));
โฌ๏ธ๋ก๊ทธ์ธ ๊ณ ๋ํ
๋น ๊ฐ์ฒด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ๊ฐ์ ๋ ๋ก๊ทธ์ธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
app.use(express.json()); //json ๋ฏธ๋ค์จ์ด
app.post("/login", function (req, res) {
console.log(req.body);
var hasUserId = false;
var loginUser = {};
const { userId, password } = req.body;
db.forEach(function (user, id) {
if (user.userId === userId) {
hasUserId = true;
loginUser = user;
}
});
if (Object.keys(loginUser).length) {
if (loginUser.password === password) {
if (user.password === password) {
res.status(200).json({ message: "๋ก๊ทธ์ธ ์ฑ๊ณต", user: user });
} else {
res.status(401).json({ message: "๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค" });
}
} else {
res.status(401).json({ message: "์กด์ฌํ์ง ์๋ ์์ด๋์
๋๋ค" });
}
}
});
hasUserId
: ์ฌ์ฉ์๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ์ถ์ ํ๊ธฐ ์ํ ํ๋๊ทธ ๋ณ์loginUser
: ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด. ์ด๊ธฐ๊ฐ์ ๋น ๊ฐ์ฒด๋ก ์ค์ db.forEach()
: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํํ๋ฉฐ userId๋ฅผ ๋น๊ตํ์ฌ ์ฌ์ฉ์๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๊ณ , ํด๋น ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ loginUser์ ์ ์ฅObject.keys(loginUser).length
:loginUser
๊ฐ ๋น ๊ฐ์ฒด์ธ์ง ํ์ธํ์ฌ ์ฌ์ฉ์๊ฐ ์กด์ฌํ๋์ง ํ๋ณ- ์ฌ์ฉ์๊ฐ ์กด์ฌํ๊ณ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋ฉด ๋ก๊ทธ์ธ ์ฑ๊ณต ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ค
๋ก๊ทธ์ธ ๊ณ ๋ํ-๋ฆฌํฉํ ๋ง
์ ์ฝ๋์์๋ hasUserId
๋ผ๋ ํ๋๊ทธ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ถ์ ํ๊ณ ์๋ค. ๋ํ loginUser
์ ๋น ๊ฐ์ฒด๋ก ์ด๊ธฐํํ๊ณ ์ดํ Object.keys(loginUser).length
๋ฅผ ์ฌ์ฉํ๋ ๋ฑ ๋ถํ์ํ ๊ฐ์ฒด ์กฐ์์ ํฌํจํ๊ณ ์์ด ์ฝ๋๊ฐ ๋ณต์กํ๊ณ ๊ฐ๋
์ฑ์ด ์๋นํ ๋จ์ด์ก๋ค.
๋ถํ์ํ ๋ณ์์ ๊ฐ์ฒด ์ฌ์ฉ ์์ด ๋์ผํ ๋์์ ์ํํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํด๋ณด์๋ค.
app.use(express.json());
app.post("/login", function (req, res) {
console.log(req.body);
const { userId, password } = req.body;
let loginUser = null;
db.forEach((user) => {
if (user.userId === userId) {
loginUser = user;
}
});
if (!loginUser) {
return res.status(401).json({ message: "์กด์ฌํ์ง ์๋ ์์ด๋์
๋๋ค" });
}
if (loginUser.password === password) {
return res.status(200).json({ message: "๋ก๊ทธ์ธ ์ฑ๊ณต", user: loginUser });
} else {
return res.status(401).json({ message: "๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค" });
}
});
loginUser
์ด๊ธฐํ: null๋ก ์ด๊ธฐํํ์ฌ ์ฌ์ฉ์๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ํ๋ณdb.forEach()
: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํํ์ฌuserId
๋ฅผ ๋น๊ตํ์ฌloginUser
์ ์ค์ ํ๋ค. ์ด ๊ณผ์ ์์ loginUser๊ฐ null์ธ์ง ํ์ธํ์ฌ ์กด์ฌ ์ฌ๋ถ ํ๋ณ
โ์ค๋ฅ: db.find is not a function
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ณ ๋ํํ ๋, find()
๋ฉ์๋๋ฅผ ์ฌ์ฉ์ ์๋ํด๋ณด์๋ค. find()
๋ฉ์๋๋ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ, ์ฌ์ฉ์๋ฅผ ์ฐพ๋๋ฐ ์ ํฉํ๊ณ ์ง๊ด์ ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ. ๋ฐ๋ผ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์คํํด๋ณด์๋ค.
app.post("/login", function (req, res) {
console.log(req.body);
const { userId, password } = req.body;
const loginUser = db.find((user) => user.userId === userId);
if (!loginUser) {
return res.status(401).json({ message: "์กด์ฌํ์ง ์๋ ์์ด๋์
๋๋ค" });
}
if (loginUser.password === password) {
return res.status(200).json({ message: "๋ก๊ทธ์ธ ์ฑ๊ณต", user: loginUser });
} else {
return res.status(401).json({ message: "๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค" });
}
});
๊ธฐ๋์๋ ๋ฌ๋ฆฌ, ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค.
์์ธ
db๋ฅผ Map
๊ฐ์ฒด๋ก ์ฌ์ฉํ๊ณ ์์ด์ ๋ฐ์ํ๋ ๋ฌธ์ ์๋ค. Map
๊ฐ์ฒด๋ ํค-๊ฐ ์์ ๋ฐ์ดํฐ๋ก ์ ์ฅํ๋ฉฐ, find()
๋ฅผ ์ง์ํ์ง ์๋๋ค...find()
๋์ forEach
, entries()
, values()
๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํํด์ผ ํ๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ
forEach
๋ฅผ ์ผ๋ค. ๋ก๊ทธ์ธ ๊ณ ๋ํ-๋ฆฌํฉํ ๋ง ์ฝ๋..!
Map ๊ด๋ จ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช |
---|---|
db.get(key) |
ํค๋ก ์์ ์ฐพ๊ธฐ |
db.set(key, value) |
์์ ์ถ๊ฐ |
db.forEach((value, key) => {...}) |
์ ์ฒด ์ํ |
Array.from(db.values()) |
Map ๊ฐ์ ๋ฐฐ์ด๋ก ๋ณํ |
โ๏ธ์ฑ๋ API ์ค์ต
API ์ค๊ณ
์์ฑ
method | post |
path | /channels |
req | body(channelName) |
res | 201: ${channelName}๋ ์ฑ๋์ ์์ํฉ๋๋ค. 400: ์ฑ๋ ์ด๋ฆ์ ์ ๋ ฅํด์ฃผ์ธ์. |
์์
method | put |
path | /channels/:id |
req | URL(id), body(channelName) |
res | 200: ์ฑ๋๋ช
์ด ์ฑ๊ณต์ ์ผ๋ก ์์ ๋์์ต๋๋ค, 404: ์ฑ๋์ ์ฐพ์ ์ ์์ต๋๋ค. |
์ญ์
method | delete |
path | /channels/:id |
req | URL(id) |
res | 200: ${channelName} ์ฑ๋์ ์ญ์ ํ์ต๋๋ค. 404: ์ฑ๋์ ์ฐพ์ ์ ์์ต๋๋ค. |
์กฐํ
method | get |
path | /channels |
req | x |
res | 200: ์ฑ๋ ์ ์ฒด ์กฐํ ์ฑ๊ณต(์ ์ฒด ๋ฐ์ดํฐ list, json array) 404: ์ฑ๋์ด ์กด์ฌํ์ง ์์ต๋๋ค. |
๊ฐ๋ณ ์กฐํ
method | get |
path | /channels/:id |
req | URL(id) |
res | 200: ์ฑ๋ ์กฐํ ์ฑ๊ณต 404: ์ฑ๋์ ์ฐพ์ ์ ์์ต๋๋ค. |
API ๊ตฌํ-app.route()
์ง๊ธ๊น์ง๋ ๋ชจ๋ API์ ๊ฒฝ๋ก๋ฅผ ํ๋ํ๋ ๋ค ์์ฑํด์ฃผ์๋ค. ํ์ง๋ง, Express์ route()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ผํ ๊ฒฝ๋ก์ ๋ํ ์ฌ๋ฌ HTTP ๋ฉ์๋๋ฅผ ์ฒด์ธ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
โญ app.route()
๋์ผํ ๊ฒฝ๋ก์ ๋ํด ์ฌ๋ฌ HTTP ๋ฉ์๋๋ฅผ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ Express ๊ธฐ๋ฅ
์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.!
app
.route("/channels")
.get((req, res) => {
res.status(200).json({ message: "์ฑ๋ ์กฐํ ์ฑ๊ณต" });
})
.post((req, res) => {
res.status(201).json({ message: "์ฑ๋ ์์ฑ ์ฑ๊ณต" });
});
app
.route("/channels/:id")
.get((req, res) => {
res.status(200).json({ message: "์ฑ๋ ์กฐํ ์ฑ๊ณต" });
})
.put((req, res) => {
res.status(200).json({ message: "์ฑ๋ ์์ ์ฑ๊ณต" });
})
.delete((req, res) => {
res.status(200).json({ message: "์ฑ๋ ์ญ์ ์ฑ๊ณต" });
});
๐๋ผ์ฐํฐ ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์์ ๋ํ ๊ณ ๋ฏผ
๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ์๋ํฌ์ธํธ๋ผ๋ฆฌ ๋ฌถ์ด์ ํธํ๊ณ ์ฝ๋๊ฐ ํ๊ฒฐ ๊ฐ๊ฒฐํด์ง๊ธด ํ์ง๋ง, ์ฌ์ ํ ๋นํจ์จ์ ์ธ ๋ถ๋ถ์ด ์๋ ๊ฒ ๊ฐ์๋ค. ๋ชจ๋ HTTP ๋ฉ์๋๊ฐ req
, res
๋ฅผ ์ธ์๋ก ๋ฐ๋๋ฐ, ์ด๊ฒ๋ค์ ๊ณ์ ๋ฐ๋ก ์ ์ธํด์ฃผ๊ณ , ๋ ๊ฐ์ ๋์๊น์ง ํ ์ฝ๋ ๋ด ์์ฑํ์๋๋ route()
๋ฅผ ์ฌ์ฉํ๋ ์๋ฏธ๊ฐ ์์๊น ์ถ์ ์ ๋๋ก ์ฝ๋๊ฐ ๊ธธ์ด์ก๋ค. ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์์๊น ๊ณ ๋ฏผํด๋ณด์๋ค.
๋ฉ์๋๋ณ๋ก ๋๋ ์ผ ํ๋ ์ด์
์ฌ์ค ๋ผ์ฐํฐ์์ ์ฝ๋ฐฑ์ ๊ฐ๊ฐ ๋ถ๋ฆฌํด์ ์์ฑํ๋ ์ด์ ๋ HTTP ๋ฉ์๋๋ง๋ค ์ํํ๋ ๊ธฐ๋ฅ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด, GET ์์ฒญ๊ณผ POST ์์ฒญ์ ๊ฐ์ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ ํ ๋ค๋ฅธ ๋์์ ์ํํ๋ค.
๊ฐ HTTP ๋ฉ์๋๋ณ ๋ชฉ์ ๊ณผ ๋ก์ง์ ์ดํด๋ณด๋ฉด,
๋ฉ์๋ | ๋ชฉ์ | ์ผ๋ฐ์ ์ธ ๋ก์ง |
---|---|---|
GET /channels | ๋ชฉ๋ก ์กฐํ | DB์์ ๋ชจ๋ ์ฑ๋ ๋ถ๋ฌ์ค๊ธฐ |
POST /channels | ์์ฑ | ์์ฒญ ๋ณธ๋ฌธ์์ ์ฑ๋ ์ ๋ณด ๋ฐ์ DB์ ์ถ๊ฐ |
GET /channels/:id | ๋จ์ผ ์กฐํ | ํน์ ์ฑ๋ id๋ก ์กฐํ |
PUT /channels/:id | ์์ | ํด๋น ์ฑ๋์ ์ ๋ณด ์์ |
DELETE /channels/:id | ์ญ์ | ์ฑ๋ ์ญ์ |
๊ทธ๋ ๋ค๋ฉด ๋ผ์ฐํฐ ์ฝ๋์ ์ค๋ณต์ ์ค์ด๋ฉด์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ์ ์์๊น?
โ ๊ณตํต ๋ก์ง์ ํจ์๋ก ๋ถ๋ฆฌํ๊ธฐ
์ฒซ ๋ฒ์งธ ํด๊ฒฐ์ฑ ์ ๊ณตํต ๋ก์ง์ ํจ์๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ฑ๊ณต ์๋ต์ ๋ณด๋ด๋ ๋ก์ง์ด ์ฌ๋ฌ ์๋ํฌ์ธํธ์์ ๋ฐ๋ณต๋๋ค๋ฉด, ์ด๋ฅผ ํจ์๋ก ๋ง๋ค์ด ์ฌ์ฌ์ฉํ ์ ์๋ค.
function sendSuccess(message) {
return (req, res) => {
res.status(200).json({ message });
};
}
app.route("/channels")
.get(sendSuccess("์ฑ๋ ์กฐํ ์ฑ๊ณต"))
.post((req, res) => {
res.status(201).json({ message: "์ฑ๋ ์์ฑ ์ฑ๊ณต" });
});
์ด๋ ๊ฒ ํ๋ฉด ๋ฐ๋ณต๋๋ ํจํด์ ํจ์๋ก ์ถ์ถํ์ฌ ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.
โ ๋ผ์ฐํฐ๋ฅผ ๋ฐ๋ก ํ์ผ๋ก ๋ถ๋ฆฌํ๊ธฐ (Controller ๊ตฌ์กฐ)
๋ ๋ฒ์งธ ํด๊ฒฐ์ฑ ์ ๋ผ์ฐํฐ์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ด ๋ฐฉ์์ MVC ํจํด์ ๋ฐ๋ฅด๋ ๊ฒ์ผ๋ก, ๋ผ์ฐํฐ๋ URL ๊ฒฝ๋ก์ HTTP ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ , ์ค์ ๋ก์ง์ ์ปจํธ๋กค๋ฌ์์ ์ฒ๋ฆฌํ๋ค.
// channels.controller.js
exports.getAll = (req, res) => {
// ์ฑ๋ ๋ชฉ๋ก ์กฐํ ๋ก์ง
};
exports.create = (req, res) => {
// ์ฑ๋ ์์ฑ ๋ก์ง
};
// router.js
router.route("/channels")
.get(channelsController.getAll)
.post(channelsController.create);
์ด๋ ๊ฒ ํ๋ฉด ๋ผ์ฐํ ๋ง ์ ์ธํด๋๊ณ , ํต์ฌ ๋ก์ง์ ๋ค๋ฅธ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์์ด ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค. ๋ํ, ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ๋ ํฅ์๋๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์ ํตํด Express ๋ผ์ฐํฐ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์๋ค. ํนํ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ด๋ฌํ ๊ตฌ์กฐํ๋ ๋์ฑ ์ค์ํด์ง๋ค!
API ๊ตฌํ-์์ฑ ์ฝ๋
const { channel } = require("diagnostics_channel");
const express = require("express");
const app = express();
app.listen(6000);
app.use(express.json());
let db = new Map();
var id = 1;
app
.route("/channels")
.get((req, res) => {
// const channels = Array.from(db.values());
// res.status(200).json({ message: "์ฑ๋ ์ ์ฒด ์กฐํ ์ฑ๊ณต", channels });
if (db.size !== 0) {
var channels = {};
db.forEach(function (value, key) {
channels[key] = value;
});
console.log(channels);
res.status(200).json({ message: "์ฑ๋ ์ ์ฒด ์กฐํ ์ฑ๊ณต", channels });
} else {
res.status(404).json({ message: "์ฑ๋์ด ์กด์ฌํ์ง ์์ต๋๋ค." });
}
})
.post((req, res) => {
if (req.body.channelName) {
db.set(id++, req.body);
res
.status(201)
.json({ message: `${req.body.channelName} ์ฑ๋์ ์์ํฉ๋๋ค.` });
} else {
res.status(400).json({ message: "์ฑ๋ ์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์." });
}
});
app
.route("/channels/:id")
.get((req, res) => {
let { id } = req.params;
id = parseInt(id);
var channel = db.get(id);
if (channel) {
res.status(200).json({ message: "์ฑ๋ ์กฐํ ์ฑ๊ณต", channel: channel });
} else {
res.status(404).json({ message: "์ฑ๋์ ์ฐพ์ ์ ์์ต๋๋ค." });
}
})
.put((req, res) => {
let { id } = req.params;
id = parseInt(id);
var channel = db.get(id);
if (channel) {
var newChannel = req.body.channelName;
channel.channelName = newChannel;
db.set(id, channel);
res.status(200).json({
message: "์ฑ๋๋ช
์ด ์ฑ๊ณต์ ์ผ์ผ๋ก ์์ ๋์์ต๋๋ค.",
channel: channel,
});
} else {
res.status(404).json({ message: "์ฑ๋์ ์ฐพ์ ์ ์์ต๋๋ค." });
}
})
.delete((req, res) => {
let { id } = req.params;
id = parseInt(id);
var channel = db.get(id);
if (channel) {
db.delete(id);
res
.status(200)
.json({ message: `${channel.channelName} ์ฑ๋์ ์ญ์ ํ์ต๋๋ค.` });
} else {
res.status(404).json({ message: "์ฑ๋์ ์ฐพ์ ์ ์์ต๋๋ค." });
}
});
์ด๋ฒ ์ค์ต์ ํตํด JavaScript์ truthy/falsy ๊ฐ๋ ์ด ์ค์ ์ฝ๋์์ ์ด๋ป๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋์ง ์ฒด๊ฐํ ์ ์์๋ค. ์๋ฃ๊ตฌ์กฐ์ ํน์ฑ๊ณผ ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ช ํํ ๊ณ ๋ คํ๋ฉด์ ์ฝ๋๋ฅผ ์ง์ผ ํ๋ค๋ ์ ์ ๊น์ด ๊นจ๋ฌ์๋ค.
๋ํ, Express์ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ํ์ฉํด API๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ๋ ์ตํ๋ค. app.route()๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ์๋ํฌ์ธํธ์ HTTP ๋ฉ์๋๋ฅผ ๋ฌถ์ผ๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์ฝ๊ฐ ํฅ์๋์์ง๋ง, ์ ์ฒด์ ์ผ๋ก๋ ์ฌ์ ํ ๋ง์์ ๋ค์ง ์๋๋ค. ์์ผ๋ก API๊ฐ ๋ ๋ณต์กํด์ง ํ ๋ฐ, ์ด ์ ๋ ๊ตฌ์กฐ๊ฐ ํด๋ฆฐ์ฝ๋์ ์ต์ ์ด๋ผ๋ฉด ๊ฝค ๋ต๋ตํ ๊ฒ ๊ฐ์๋ค.
๋คํํ ์ข ๋ ์์๋ณด๋ ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ถ๋ฆฌํ๊ฑฐ๋ ์ปจํธ๋กค๋ฌ ํจํด์ ์ ์ฉํ๋ ๋ฑ ๋ ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ง์ด ์๋ค๋ ๊ฑธ ์๊ฒ ๋๋ค. ํนํ, Express๋ณด๋ค NestJS๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ ์ฉํ ์ ์๋ค๋๋ฐ, Nest ๊ณต๋ถ ์ด์ธํ ํด์ผ์ง