Node.js API 설계 및 실습

문소영·2024년 3월 22일

임시 DB구축

현재 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);
  1. Node.js 환경에서 웹 애플리케이션을 개발하기 위해 사용되는 Express 프레임워크를 불러오는 코드이다. require는 node.js의 내장함수 중 하나로, 지정된 모듈을 불러오는 역할을 한다.
  2. Map 객체를 생성하는 코드이다. Map은 key-value 쌍의 데이터를 저장하는 자료구조를 가지고 있다.
  3. map 객체에 데이터를 추가할 때는 db.set(key, value)값을 넣는다.

데이터 조회

전체 유튜버 조회

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 정보에 대한 응답으로 메시지를 반환한다.

0개의 댓글