웹풀사이클 18일차 - 객체, 유튜브 채널 api 설계,
객체
객체인지 확인하기 num.constructor == Object
console.log(num.constructor == Object);
num, string, obj 확인해보기
const obj = {};
const num = 1;
const str1 = "str";
console.log(num.constructor == Object); //false
console.log(obj.constructor == Object); //true
console.log(str1.constructor == Object); //false
숫자는 객체가 아니다.
객체의 길이 확인하기 => 빈 객체인지 검사 - Object.keys(obj).length
const obj = {};
const obj2 = {
msg: "메세지",
};
const num = 1;
const str1 = "str";
const str2 = "";
console.log(Object.keys(obj).length); //0
console.log(Object.keys(obj2).length); //1
console.log(Object.keys(num).length); //0
console.log(Object.keys(str1).length); //3
console.log(Object.keys(str2).length); //1
채널 api 설계
채널
- 채널 생성
- 채널 수정
- 채널 삭제
로그인 페이지 : 로그인 api
회원가입 페이지: 회원가입 api
마이페이지: 회원정보 조회api, 회원탈퇴 api
1. 채널 생성 - post, /channels
req: body{channelName,description, userIndex }
res 201: "앞으로의 채널 운영을 응원합니다."
2. 채널 수정 - put, /channels/:id
req: params.id, body{channelName, description, userIndex }
res 200: "채널 정보가 성공적으로 수정되었습니다."
3. 채널 삭제 - delete, /channels/:id
req: params.id
res 200: "삭제되었습니다."
4. 해당 회원 전체 채널 조회 - get, /channels
req: body{ userIndex }
res 200: 채널 전체 데이터
5. 개별 채널 정보 조회 - get, /channels/:id
req: params.id
res 200: 채널 개별 데이터
userIndex는 회원Map의 index 번호이다. userIndex 를 이용해 이를 키값으로 이용하는 조건으로 구현했다.
예를 들어 채널을 생성할 때도 userIndex 를 저장한다. body의 userIndex를 이용해 맵에서 해당 userIndex를 가진 채널을 검색했다.
아직은 user와 연결이 되지 않아서 user부분에서 채널을 관리하지 않았기 때문에 이렇게 구현하였으나 연결된다면 user에서 채널을 관리하도록 하는게 좋을 것 같다.
const express = require("express");
const app = express();
app.listen(3000);
app.use(express.json());
let channels = new Map();
let index = 1;
app
.route("/channels")
.post((req, res) => {
let { channelName, description, userIndex } = req.body;
if (channelName && description && userIndex) {
channels.set(index++, req.body);
res.status(201).json({
message: "채널이 성공적으로 생성되었습니다.",
});
} else {
res.status(400).json({
message: "모든 내용을 보내주세요",
});
}
})
.get((req, res) => {
//채널 조회
let { userIndex } = req.body;
let userChannel = [];
if (userIndex) {
//userIndex를 받은 경우 해당 회원
channels.forEach((value) => {
if (value.userIndex == userIndex) {
userChannel.push(value);
}
});
if (channels.size > 0) {
res.status(200).json(userChannel);
} else {
res.status(404).json({ message: "해당 회원의 채널이 없습니다." });
}
} else {
//userIndex를 받지 않은 경우 전체 회원 조회
res.status(400).json([...channels.values()]);
}
});
app
.route("/channels/:id")
.put((req, res) => {
//채널 수정
let { id } = req.params;
id = parseInt(id);
let channel = channels.get(id);
let { userIndex, channelName, description } = req.body;
if (channel) {
if (userIndex && channelName && description) {
channels.set(id, req.body);
res.status(200).json({ message: "성공적으로 수정되었습니다." });
} else {
res.status(400).json({
message: "userIndex와 채널명, 채널 설명은 필수 항목입니다.",
});
}
} else {
res.status(400).json({
message: `해당 id의 채널이 없습니다.`,
});
}
})
.delete((req, res) => {
//채널 삭제
let { id } = req.params;
id = parseInt(id);
let channel = channels.get(id);
if (channel) {
channels.delete(id);
res.status(200).json({
message: ` ${channel.channelName}채널이 성공적으로 삭제되었습니다.`,
});
} else {
res.statue(400).json({
message: "해당 id의 채널을 찾을 수 없습니다.",
});
}
})
.get((req, res) => {
//개별 채널 조회
let { id } = req.params;
id = parseInt(id);
let channel = channels.get(id);
if (channel) {
res.status(200).json(channel);
} else {
res.status(400).json({
message: "채널 정보를 찾을 수 없습니다.",
});
}
});
참고: 전체 채널 조회시