현재 node.js 중심으로 학습하고 있어서 아직 DB구축 및 연동을 하지 못했다. 따라서 임시로 json형식으로 다음과 같은 데이터를 넣었다.
const express = require('express'); //1
const app = express();
let youtuber1 = {
channelTitle : "십오야",
sub : "593만명",
videoNum:"993개"
}
let youtuber2 = {
channelTitle : "침착맨",
sub : "227만명",
videoNum:"1032개"
}
let youtuber3 = {
channelTitle : "테오",
sub : "54.8만명",
videoNum:"726개"
}
var id = 1
let db = new Map() //2
db.set(id++,youtuber1) //3
db.set(id++,youtuber2)
db.set(id++,youtuber3)
app.listen(1234);
app.get('/youtubers', function(req,res){
var youtubers = {}
db.forEach(function(value, key){
youtubers[key] = value
})
res.json(youtubers)
})
클라이언트가 '/youtubers'로 GET 요청을 하면, 서버는 등록된 youtubers 정보를 JSON형식으로 응답한다. db에 저장된 데이터를 forEach를 사용하여 순회하면서 key와 value를 이용해 새로운 객체 youtubers에 추가한다. 추가된 youtubers 정보를 JSON 형식으로 응답을 제공한다.
app.get('/youtubers/:id',function(req,res){
let {id} = req.params
id = parseInt(id)
const youtuber = db.get(id)
if(youtuber == undefined){
res.json({
message: "유튜버 정보를 찾을 수 없습니다."
})
}else{
res.json(youtuber)
}
})
클라이언트로부터 'youtubers/:id'로 GET요청이 들어오면, 요청의 파라미터에서 id를 추출한다. 추출한 id는 현재 정수형이 아니므로 정수형으로 변환한 후, db에서 해당 id에 해당하는 youtuber 정보를 조회한다. if-else 문으로 정보가 있는 유튜버인지 아닌지 조회한 후 없으면 message를 띄우고 해당 유튜버가 있으면 해당 유튜버에 대한 정보를 JSON 형식으로 제공한다.
app.post('/youtubers', function(req, res){
db.set(id++, req.body)
res.json({
message : `${db.get(id-1).channelTitle}"님 , 유튜버 생활을 응원합니다!"`
})
})
클라이언트로부터 '/youtubers' 엔드포인트로 POST 요청이 들어오면, 요청의 body에 포함된 데이터를 로깅한다. db에 새로운 id를 부여하고, 해당 id와 함께 요청으로 받은 데이터를 db에 추가한다. 추가된 youtuber 정보에 대한 메세지를 JSON형식으로 응답을 제공한다.
app.delete('/youtubers/:id' , function(req,res){
let {id} = req.params
id = parseInt(id)
var youtuber = db.get(id)
if(youtuber == undefined){
res.json({
message : `요청하신 ${id}번은 없는 유튜버입니다.`
})
}else{
const channelTitle = youtuber.channelTitle
db.delete(id)
res.json({
message : `${channelTitle}님, 아쉽지만 우리 인연은 여기까지..`
})
}
})
클라이언트로부터 '/youtubers/:id' DELETE 요청이 들어오면, 요청의 파라미터에서 id를 추출한다.추출된 id에 해당하는 youtuber 정보를 db에서 조회한다.조회된 youtuber 정보가 존재하지 않으면, 해당 id에 해당하는 YouTuber가 없다는 메시지를 JSON 형식으로 응답으로 제공한다. 조회된 youtuber 정보가 존재하면, 해당 youtuber 정보를 db에서 삭제하고, 삭제된 youtuber 정보에 대한 메시지를 JSON 형식으로 응답으로 제공합니다.
app.delete('/youtubers', function(req, res){
var msg =""
if (db.size >= 1){
db.clear()
msg = "전체 유튜버가 삭제되었습니다."
}else{
msg = "삭제할 유튜버가 없습니다."
}
res.json({
message : msg
})
})
클라이언트로부터 '/youtubers/:id' DELETE 요청이 들어오면 clear()이라는 내장함수를 사용하여 데이터 전체를 삭제한다.
app.put('/youtubers/:id', function(req,res){
let {id} = req.params
id = parseInt(id)
var youtuber = db.get(id)
var oldTitle = youtuber.channelTitle
if(youtuber == undefined){
res.json({
message : `요청하신 ${id}번은 없는 유튜버입니다.`
})
}else{
var newTitle = req.body.channelTitle
youtuber.channelTitle = newTitle
db.set(id, youtuber)
res.json({
message : `${oldTitle}님,, 채널명이 ${newTitle}로 변경되었습니다.`
})
}
})
클라이언트의 PUT 요청으로 받은 데이터를 사용하여 db에 저장된 특정 id에 해당하는 YouTuber 정보를 업데이트하고, 업데이트된 YouTuber 정보에 대한 응답으로 메시지를 반환한다.