Express 메서드 연습해보기

ssomae·2024년 9월 5일

DevCourse

목록 보기
12/29
post-thumbnail

db에 있는 데이터들 전체 조회해보기

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('/youtuber/:id', function (req, res) {
    let { id } = req.params;
    id = parseInt(id);
    //console.log(id);
    const youtuber = db.get(id);
    if (youtuber == undefined) {
        res.json({
            message: "Wrong Access"
        })
    } else {
        res.json(youtuber);
    }
})

app.get('/youtubers', function (req, res) {
    let start = 0;
    res.json(db);
    console.log(db);
})

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

app.post('/youtuber', function (req, res) {
    //body에 숨겨져서 들어온 데이터를 화면에 출력해볼까
    console.log(req.body); //

    //등록..? Map(db)에 저장(set)을 해야한다.
    db.set(id++, req.body);
    res.json({
        message: `${req.body.channelTitle}님, 유튜버 생활을 응원합니다`
   });
})
  • GET 메소드를 통해 db에 있는 값들을 전달해 주는것이 목표가 될것 같다.
console.log(db.values());
[Map Iterator] {
  { channelTitle: '십오야', subscriber: '593만명', videoNum: '993개' },
  { channelTitle: '침착맨', subscriber: '227만명', videoNum: '6600개' },
  { channelTitle: '테오', subscriber: '100만명', videoNum: '1100개' }
}
맵의 value값들만 출력하는 메서드

console.log(db.set());
Map(4) {
  1 => { channelTitle: '십오야', subscriber: '593만명', videoNum: '993개' },
  2 => { channelTitle: '침착맨', subscriber: '227만명', videoNum: '6600개' },
  3 => { channelTitle: '테오', subscriber: '100만명', videoNum: '1100개' },
  undefined => undefined
}
app.get('/youtubers', function (req, res) {
    let start = 0;
    db.forEach(function (youtuber) {
        console.log(youtuber);
    })

    let jsonObject = {};
    db.forEach(function (value, key) {
        jsonObject[key] = value;
    });
    res.json(jsonObject)
})
  • 객체에다가 전달해서 전달해주자
  • 아래와 같이 간략화 할 수 있을것 같다.
app.get("/youtubers", (req, res) => {
    res.json(Object.fromEntries(db));
});

foreach문

/**
 * 
 * 배열
 */

const arr = [1, 2, 3, 4, 5];

arr.forEach((a,b,c)=> { // 앞에는 데이터, 뒤에는 인덱스, c는 배열 전체
    console.log(`a : ${a}, b : ${b}, c: ${c}`);
})
console.log('==============');
//Map과 foreach

let map = new Map();
map.set(7, "seven");
map.set(8, "eight");
map.set(9, "nine");

map.forEach((a,b) => {// 첫번째는 value, 두번째는 key
  console.log(`a : ${a}, b : ${b}`);  
})

map 함수(메소드) vs forEach

// map 함수(메소드) vs forEach

const arr = [1, 2, 3, 4, 6];

const forEachArr = arr.forEach((a,b,c)=> { // 앞에는 데이터, 뒤에는 인덱스, c는 배열 전체
    //console.log(`a : ${a}, b : ${b}, c: ${c}`);
    return a * 2;
})
//console.log('==============')
console.log(arr);

const mapArr = arr.map((a,b,c)=> { // 앞에는 데이터, 뒤에는 인덱스, c는 배열 전체
    //console.log(`a : ${a}, b : ${b}, c: ${c}`);
    return a * 2;
}) 
console.log(arr);//map은 새로 생성되는 객체를 리턴한다.

//forEach로 return 하면 undefined,
//map으로 return하면 2,4,6,8,12
console.log(`forEach로 return 하면 ${forEachArr},
map으로 return하면 ${mapArr}`);     

DELETE API 연습하기

  • GET/youtubers → 전체 유튜버 조회
  • GET /youtuber/:id : id로 map에서 객체를 찾아서, 그 객체의 정보를 뿌려준다
    • req: params.id ← map에 저장된 key 값을 전달
    • res: map에서 id로 객체를 조회해서 전달
  • POST/youtuber
    • req: body에 전달할 데이터를 전달받는다. (채널명, 구독자수, 비디오 개수)
    • res : “channel name님, 유튜버 생활을 응원합니다!”
  • 개별 유튜버 삭제 ⇒ DELETE/youtubers/:id
    • req: params.id
    • res: “channelTitle님 다음에 또 뵙겠습니다.”
app.delete('/youtubers/:id', function (req, res) {
    let { id } = req.params;
    id = parseInt(id);

    const channelTitle = db.get(id).channelTitle;
     db.delete(id);
    res.json({
        message:`${channelTitle}님 다음에 또 뵙겠습니다.`
    })
    
})
  • 추가적인 예외사항도 추가해보자!
app.delete('/youtubers/:id', function (req, res) {
    let { id } = req.params;
    id = parseInt(id);
    let youtuber = db.get(id);

    if (youtuber == undefined) {
        res.json({
            message: `요청하신 ${id}번은 없는 정보입니다`
        })
    } else {
        const channelTitle =youtuber.channelTitle;
        db.delete(id);
        res.json({
            message: `${channelTitle}님 다음에 또 뵙겠습니다.`
        })
    }
    
})
  • 전체 유튜버 삭제 ⇒ DELETE/youtubers
    • req: X

    • res: 모든 정보가 삭제되었습니다.

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

PUT API 연습해보기

  • GET/youtubers → 전체 유튜버 조회
  • GET /youtuber/:id : id로 map에서 객체를 찾아서, 그 객체의 정보를 뿌려준다
    • req: params.id ← map에 저장된 key 값을 전달
    • res: map에서 id로 객체를 조회해서 전달
  • POST/youtuber
    • req: body에 전달할 데이터를 전달받는다. (채널명, 구독자수, 비디오 개수)
    • res : “channel name님, 유튜버 생활을 응원합니다!”
  • 개별 유튜버 삭제 ⇒ DELETE/youtubers/:id
    • req: params.id
    • res: “channelTitle님 다음에 또 뵙겠습니다.”
  • 전체 유튜버 삭제 ⇒ DELETE/youtubers
    • req: X
    • res: 모든 정보가 삭제되었습니다.
  • 개별 유튜버 수정 ⇒ PUT/youtubers/:id
    • req : params.id, body ← channelTitle
    • res: 수정된 정보들?
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 == undefined) {
        res.json({
            message: `요청하신 ${id}번은 없는 정보입니다`
        })
    } else {
        let newChannelTitle = req.body.channelTitle;
        youtuber.channelTitle = newChannelTitle;
        db.set(id, youtuber);

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


HTTP 상태 코드

  1. 1xx (정보): 요청이 수신되어 처리 중임을 나타냅니다.
    • 100 Continue: 요청의 일부가 수신되었고, 나머지 요청을 계속해서 보내도 된다는 의미입니다.
  2. 2xx (성공): 요청이 성공적으로 처리되었음을 나타냅니다.
    • 200 OK: 요청이 성공적으로 처리되었을 때 사용합니다.
    • 201 Created: 요청이 성공적으로 처리되어 자원이 생성되었을 때 사용합니다.(등록성공)
  3. 3xx (리다이렉션): 요청을 완료하기 위해 추가 작업이 필요함을 나타냅니다.
    • 301 Moved Permanently: 요청한 리소스가 영구적으로 다른 URL로 이동되었을 때 사용합니다.
    • 302 Found: 요청한 리소스가 일시적으로 다른 위치에 있을 때 사용합니다.
  4. 4xx (클라이언트 오류): 클라이언트의 요청에 문제가 있음을 나타냅니다.
    • 400 Bad Request: 잘못된 요청으로 서버가 요청을 이해하지 못할 때 사용합니다.
    • 401 Unauthorized: 인증이 필요하거나 잘못된 인증 정보가 제공되었을 때 사용합니다.
    • 404 Not Found: 요청한 리소스를 찾을 수 없을 때 사용합니다.
  5. 5xx (서버 오류): 서버에 문제가 발생했음을 나타냅니다.
    • 500 Internal Server Error: 서버에서 일반적인 오류가 발생했을 때 사용합니다.
    • 503 Service Unavailable: 서버가 일시적으로 요청을 처리할 수 없을 때 사용합니다.
profile
성장해나갈 개발자

0개의 댓글