Express로 미니프로젝트 만들기 - 2

wltjd1688·2025년 2월 20일

풀사이클

목록 보기
21/74

미니프로젝트

미니 프로젝트(?)에서 회원 api를 앞에 했으니, 여기서는 채널에 대한 api를 만들려고 한다.

회원

  • 로그인
  • 로그아웃
  • 마이페이지
  • 회원 탈퇴

채널

  • 생성(계정 1개당 100개까지)
  • 수정
  • 삭제

채널 API 설계

  1. 채널 "생성" POST /channels

    • req: body(channelTitle)
    • res 201: "${channelTitle}님 채널을 응원합니다." => 다른 페이지 띄워주기
  2. 채널 "수정" PUT /channels/:id

    • req: URL(id), body(channelTitle)
    • res 200: "채널명이 성공적으로 수정되었습니다. 기존:>수정:{} -> 수정:{}"
  3. 채널 "삭제" DELETE /channels/:id

    • req: URL(id)
    • res 200: "삭제되었습니다." => 메인페이지
  4. 채널 전체 "조회" GET /channels

    • req: X
    • res 200: 채널 전체 데이터 list,json array
  5. 채널 개별 "조회" GET /channels/:id

    • req: URL(id)
    • res 200: 채널 개별 데이터

화면 생성

코드

const express = require("express")
const app = express()

app.listen(7777)

let db = new Map();
let id = 1;

app.use(express.json())

app.route('/channels')
    // 채널 생성
    .post((req,res) =>{
        if (req.body.channelTitle){
            db.set(id++, req.body)

            res.status(201).json({
                message: `${db.get(id-1).channelTitle}님 채널을 응원합니다.`
            })
        } else {
            res.status(400).json({
                message: `요청 값을 제대로 보내주세요.`
            })
        }
    })

    // 채널 전체 조회
    .get((req,res) =>{
        if (db.size){
            let channels = []
            db.forEach((value)=>{
                channels.push(value)
            })
            res.status(200).json(channels);
        } else{
            res.status(404).json({message:"채널 정보를 찾을 수 없습니다."})
        }
    })

app.route('/channels/:id')
    // 채널 개별 수정
    .put((req,res) =>{
        isExist(req.body, res);
        let {id} = req.params;
        id = parseInt(id);
        let channel = db.get(id);

        const newTitle = req.body.channelTitle
        if (newTitle.length < 1) return res.status(401).json({
            message: "1자 이상 작성해주세요"
        })
        
        if (channel) {
            const oldtitle = channel.channelTitle

            channel.channelTitle = newTitle;
            db.set(id, channel)

            res.status(200).json({
                message: `${oldtitle}${newTitle}로 수정되었습니다.`
            })
        } else {
            res.status(400).json({
                message: "채널 정보를 찾을 수 없습니다."
            })
        }
    })

    // 채널 개별 삭제
    .delete((req,res) =>{
        let {id} = req.params;
        id = parseInt(id);
        let channel = db.get(id);

        if (channel) {
            db.delete(id);
            res.status(200).json({
                message: `${channel.channelTitle}이 삭제되었습니다.`
            })
        } else {
            res.status(400).json({
                message: "채널 정보를 찾을 수 없습니다."
            })
        }
    })

    // 채널 개별 조회
    .get((req,res) =>{
        let {id} = req.params;
        id = parseInt(id);
        let channel = db.get(id);

        if (channel) {
            res.status(200).json(channel)
        } else {
            res.status(400).json({
                message: "채널 정보를 찾을 수 없습니다."
            })
        }
    })

function isExist(obj, response, text="입력한 값을 확인해주세요"){
    if (Object.keys(obj).length == 0) {
        return response.status(400).json({ message: text})
    }
};

리팩토링

  1. 채널 "생성"

    • 정상 동작 ✅
    • body 누락 ✅
  2. 채널 "수정"

    • 정상 동작 ✅
    • body 누락 ✅
    • channelTitle 1글자 이상 🛑 => ✅
      1. 처음에는 없는 조건이긴 한데, 조건문을 추가함
      2. body를 누락했을 때, 1글자 이상입력이 나옴
      3. 변수의 순서와 if문을 따로 만듬으로 해결
  3. 채널 "삭제"

    • 정상 동작 ✅
    • 없는 데이터 ✅
  4. 채널 전체 "조회": 정상 작동 ✅

  5. 채널 개별 "조회"

    • 없는 데이터 ✅

이후에 고려해볼 사항

  • channel과 youter파일을 따로 만들었는데 이 둘을 나중에 어떻게 연결하지?
profile
일단 해!!!!

0개의 댓글