DB
아직 데이터베이스를 연동하지 않았기 때문에 Map으로 대신한다. key는 정수인 id, value는 채널명, 구독자 수, 영상 수 정보를 가지는 객체이다. 3개의 쌍을 넣어놓은 상태이다.
const db = new Map();
let id = 1;
const youtubers = [
{ channelTitle: "십오야", sub: "593만명", videoNum: "993개" },
{ channelTitle: "침착맨", sub: "227만명", videoNum: "6.6천개" },
{ channelTitle: "테오", sub: "54.8만명", videoNum: "726개" }
];
youtubers.forEach(youtuber => {
db.set(id++, youtuber);
})
전체 유튜버 조회
조회이므로 GET 메서드를 사용하고, 경로는 '/youtubers'이다.
현재 유튜버들의 정보가 id와 object(채널명, 구독자 수, 동영상 수)의 쌍으로 Map에 저장되어 있다.
이것을 key는 id, value는 object인 JSON으로 바꿔서 응답으로 보내준다.
app.get('/youtubers', function (req, res) {
const youtubers = {};
db.forEach(function (youtuber, id) {
youtubers[id] = youtuber;
})
res.json(youtubers);
})
유튜버 등록
등록하는 것이므로 POST 메서드를 사용하고, 경로는 '/youtubers'이다.
요청의 body에 정상적으로 접근하려면 JSON을 파싱 하는 미들웨어가 설정되어 있어야 한다.
app.use(express.json());
요청 body의 channelTitle(채널명)만 전달받고, 구독자 수와 비디오 수는 0으로 설정한다. 그리고 채널명을 응답으로 보내준다.
app.post('/youtubers', function (req, res) {
db.set(id, { ...req.body, sub: 0, videoNum: 0 }); // db에 등록
res.json({
message: `${db.get(id++).channelTitle}님, 유튜버 생활을 응원합니다!`
});
})
전체 유튜버 삭제
삭제이므로 DELETE 메서드를 사용하고, 전체에 대한 작업이므로 경로는 '/youtubers'이다.
삭제를 성공적으로 수행하면 DB를 비우고, 전체 유튜버가 삭제되었다는 메시지를 발송한다,
DB가 비어있어서 삭제할 유튜버가 없는 경우 삭제할 유튜버가 없다는 메시지를 발송한다.
app.delete('/youtubers', function (req, res) {
let msg = '';
if (db.size) {
db.clear();
msg = '전체 유튜버가 삭제되었습니다.';
} else {
msg = '삭제할 유튜버가 없습니다.';
}
res.json({
message: msg
});
})
개별 유튜버 조회
조회이므로 GET 메서드를 사용하고, 경로는 '/youtubers/:id'이다.
params의 값들은 모두 문자열로 되어있기 때문에 숫자로 변환해주어야 한다.
존재하지 않는 채널의 id에 대해 조회할 경우 해당 번호의 유튜버는 존재하지 않는다는 메시지를 발송한다.
app.get('/youtubers/:id', function (req, res) {
const id = parseInt(req.params.id);
const youtuber = db.get(id);
if (youtuber) {
res.json({ id: id, ...youtuber });
} else {
res.json({
message: `요청하신 ${id}번은 없는 유튜버입니다.`
});
}
})
개별 유튜버 수정
수정이므로 PUT 메서드를 사용하며, 개별이므로 경로는 '/youtubers/:id'이다.
유튜버의 id, 바꾸려는 채널명을 전달받아서 수정 후 이전 채널명과 수정된 채널명을 알려주는 메시지를 발송한다.
유효하지 않은 채널명인 경우 잘못된 채널명이라는 메시지를 발송한다. 강의에 있던 코드는 아니지만 request body에 아무것도 적지 않고 발송했을 때의 문제를 방지하기 위해 작성했다.
존재하지 않는 id에 대한 수정 요청이면 없는 유튜버임을 알려주는 메시지를 발송한다.
app.put('/youtubers/:id', function (req, res) {
const id = parseInt(req.params.id);
const newChannelTitle = req.body.channelTitle;
const youtuber = db.get(id);
let msg = '';
if (youtuber && newChannelTitle) {
const oldChannelTitle = youtuber.channelTitle;
msg = `${oldChannelTitle}님, 채널명이 ${newChannelTitle}으로 변경되었습니다.`
youtuber.channelTitle = newChannelTitle;
db.set(id, youtuber);
} else if (!newChannelTitle) { // 채널명이 누락된 경우
msg = `${newChannelTitle}은 잘못된 채널명입니다.`
} else { // DB에 존재하지 않는 경우
msg = `요청하신 ${id}번은 없는 유튜버입니다.`;
}
res.json({
message: msg
});
})
개별 유튜버 삭제
삭제이므로 DELETE 메서드를 사용하고, 개별이므로 경로는 '/youtubers/:id'이다.
요청으로 들어온 id를 사용하여 해당 id가 DB에 존재하는지 확인하여 존재한다면 DB에서 삭제하고, 삭제된 채널명을 알려주는 메시지를 응답으로 보낸다.
존재하지 않는 id일 경우 없는 유튜버라는 메시지를 보낸다.
app.delete('/youtubers/:id', function (req, res) {
const id = parseInt(req.params.id);
const youtuber = db.get(id);
let msg = '';
if (youtuber) {
const channelTitle = youtuber.channelTitle;
db.delete(id);
msg = `${channelTitle}님, 아쉽지만 다음에 또 뵙겠습니다.`;
} else { // undefined
msg = `요청하신 ${id}번은 없는 유튜버입니다.`
}
res.json({
message: msg
});
})
'데브코스' 카테고리의 다른 글
[5주차 - DAY1] REST API 개발 실습(1) (0) | 2024.03.25 |
---|---|
[4주차 - DAY5] Node.js 및 Express.js를 사용한 서버 개발 실습(3) (1) | 2024.03.22 |
[4주차 - DAY4] Node.js 및 Express.js를 사용한 서버 개발 실습(2) (0) | 2024.03.21 |
[4주차 - DAY3] Node.js 및 Express.js를 사용한 서버 개발 실습(1) (0) | 2024.03.20 |
[4주차 - DAY2] REST API 디자인 및 구현(2) (1) | 2024.03.19 |