객체
객체인지 확인하기 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: "채널 정보를 찾을 수 없습니다.",
});
}
});
참고: 전체 채널 조회시
'타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) > TIL' 카테고리의 다른 글
웹 풀사이클 21일차 - MARIADB로 게시판 만들기 (0) | 2023.12.22 |
---|---|
웹풀사이클 20일차 - RDBMS, 연관관계 (0) | 2023.12.20 |
웹풀사이클 17일차 - 핸들러, forEach/find, 예외처리(status), router, 유튜브 회원 api 만들기 (0) | 2023.12.15 |
웹풀사이클 16일차 - forEach, map, Delete, put, 리팩토리 (0) | 2023.12.14 |
웹풀사이클 15일차 - post와 postman, map을 json 형식으로 (0) | 2023.12.12 |