Express 메소드 연습하기 - 예외처리

ssomae·2024년 9월 6일

DevCourse

목록 보기
13/29
post-thumbnail

📌 핸들러란?

  • 요청에 의해 호출되는 메서드
  • HTTP request가 날아오면 자동으로 호출되는 메서드
    • 노드에서는 → 콜백함수로, app.HTTPMETHOD(path, handler)

json array, find(), 예외처리

const express = require('express')
const app = express()

// 서버 셋팅: 포트 넘버 1234로 셋팅
app.listen(1234)

const fruits = [
    { id: 1, name: "apple" },
    { id: 2, name: "banana" },
    { id: 3, name: "strawberry" },
    { id: 4, name: "blueberrry" }
    
];

// 과일 전체 조회
app.get('/fruits', function (req, res) {
    res.json(fruits);
})

// 과일 개별 조회
app.get('/fruits/:id', function (req, res) {
    let id = parseInt(req.params.id);
   //let fruit = fruits[id];

    let findFruit =
        fruits.find(f => (f.id === id));
    // fruits 배열 안에 있는 객체중, id 값이 params.id랑 같은 객체

    if (findFruit) {
      res.json(findFruit);   
    } else {
        res.status(404).send(
            "전달주신 id가 없습니다."
        )
    }
})
  • find 함수에 대해서 잘 알아두자
  • 예외처리시 HTTP 코드를 변경시킨 후 에러메세지 출력하기
    • 클라이언트와 소통을 정확하게 하기 위함

== vs ===


// ==, ===의 차이

if (1 == "1") { //자료형은 상관 없이 값만 비교
    console.log("same");
} else {
    console.log("different");
}

if (1 === "1") { //자료형과 값과 동시 비교
    console.log("same");
} else {
    console.log("different");
}

Youtuber demo 예외 고도화해보기

  • 에러처리를 HTTP코드를 변경해줌으로써 고도화 해보자
const express = require('express');
const app = express();

app.listen(1234);

let youtuber1 = {
    channelTitle: "십오야",
    subscriber: "593만명",
    videoNum: "993개"
}

let youtuber2 = {
    channelTitle: "침착맨",
    subscriber: "227만명",
    videoNum: "6600개"
}

let youtuber3 = {
    channelTitle: "테오",
    subscriber: "100만명",
    videoNum: "1100개"
}

let db = new Map();
let id = 1
db.set(id++, youtuber1);
db.set(id++, youtuber2);
db.set(id++, youtuber3);

app.get('/youtubers/:id', function (req, res) {
    let { id } = req.params;
    id = parseInt(id);
    //console.log(id);
    const youtuber = db.get(id);
    if (youtuber == undefined) {
        res.status(404).json({
            message: "Wrong Access"
        })
    } else {
        res.json(youtuber);
    }
})

app.get('/youtubers', function (req, res) {
    let youtubers = {};
    if (db.size!==0) {
        db.forEach(function (value, key) {
            youtubers[key] = value;
        })
        res.json(youtubers);
    } else {
        res.status(404).json({
            message:'조회할 유튜버가 없습니다'
        })
    }
})

app.use(express.json()); //req로 날아오는 body 값을 json으로 읽자
// http 외 무듈인 '미들웨어' : json 설정

app.post('/youtubers', function (req, res) {
    //body에 숨겨져서 들어온 데이터를 화면에 출력해볼까
    console.log(req.body); //
    const channelTitle = req.body.channelTitle;
    if (channelTitle) {
         //등록..? Map(db)에 저장(set)을 해야한다.
        db.set(id++, req.body);
        res.json({
            message: `${req.body.channelTitle}님, 유튜버 생활을 응원합니다`
         });   
    } else {
        res.status(400).json({//서버가 요청의 구문을 인식하지 못했을때
            message:'요청 값을 제대로 보내주세요'
        })
    }
})

app.delete('/youtubers/:id', function (req, res) {
    let { id } = req.params;
    id = parseInt(id);
    let youtuber = db.get(id);

    if (youtuber == undefined ) {
        res.status(404).json({
            message: `요청하신 ${id}번은 없는 정보입니다`
        })
    } else {
        const channelTitle =youtuber.channelTitle;
        db.delete(id);
        res.json({
            message: `${channelTitle}님 다음에 또 뵙겠습니다.`
        })
    }
    
})

app.delete('/youtubers', function (req, res) {
    // db에 값이 1개 이상이면, 전체 삭제
    // 값이 없으면 예외처리
    if (db.size >= 1) {
        db.clear();
        res.json({
            message: '전체 유튜버가 삭제되었습니다.'
        })
    } else {
        res.json({
            message: '삭제할 유튜버가 없습니다.'
        })
   }
    
})

app.put('/youtubers/:id', function (req, res) {
    let { id } = req.params;
    id = parseInt(id);

    let youtuber = db.get(id);
    let prevChannelTitle = youtuber.channelTitle
    if (youtuber) {
        res.status(404).json({
            message: `요청하신 ${id}번은 없는 정보입니다`
        })
    } else {
        let newChannelTitle = req.body.channelTitle;
        youtuber.channelTitle = newChannelTitle;
        db.set(id, youtuber);

        res.json({
            message: `${prevChannelTitle}님, 채널명이 ${newChannelTitle}로 변경되었습니다`
        })
    }
})

회원 API 설계하기

회원

  • 로그인 : POST/login
    • req : body(id, pwd)
    • res : ${name}님 환영합니다 -> 메인 페이지
  • 회원 가입: POST/join
    • req: body (id, pwd, name)
    • res:${name}님 환영합니다 → 로그인 페이지
  • 회원 개별 정보 조회 : GET/users/:id
    • req: URL (id)
    • res: id, name
  • 회원 개별 탈퇴 : DELETE/users/:id
    • req : URL (id)
    • res : 탈퇴가 완료되었습니다.
  • 회원은 계정 1개당 채널 100개를 가질 수 있다.

채널

  • 채널 생성
  • 채널 수정
  • 채널 삭제
const express = require('express');
const app = express()
app.listen(7777);
app.use(express.json()) // http 외 모듈 'json' 사용

let db = new Map();
let id = 1; //객체 식별 아이디

// 로그인
app.post('/login', function (req, res) {
    
})

// 회원 가입
app.post('/join', function (req, res) {
    console.log(req.body);
    // 입력된 body 객체가 비어 있지 않은지 확인
    if (Object.keys(req.body).length !== 0) {
        // 예시로 ID를 부여하는 방식을 간단히 시뮬레이션
        db.set(id++, req.body);

        res.status(201).json({
            message: `${req.body.name}님 환영합니다.`,
        });
    } else {
        res.status(400).json({
            message: `입력값을 다시 확인해주세요.`
        });
    }
});

// 회원 개별 조회 
app.get('/users/:id', function (req, res) {
    let { id } = req.params;
    id = parseInt(id);

    const user = db.get(id);
    if (user) {
        res.status(200).json({
            userId: user.userId,
            name : user.name
        })
    } else {
        res.status(404).json({
            message : '잘못된 아이디 번호입니다'
        })
    }
})

// 회원 개별 탈퇴
app.delete('/users/:id', function (req, res) {
     let { id } = req.params;
    id = parseInt(id);

    const user = db.get(id);
    if (user) {
        db.delete(id);
        res.status(200).json({
          message: `${user.name}님 다음에 또 뵙겠습니다`
        })
    } else {
        res.status(404).json({
            message : '잘못된 아이디 번호입니다'
        })
    }
})

profile
성장해나갈 개발자

0개의 댓글