ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [데브코스] 26일차 TIL
    TIL/교육 내용 정리 2024. 5. 4. 22:32

    핸들러, if(객체) : if 긍정문, route

    핸들러란? HTTP request가 날아오면 자동으로 호출되는 메소드 노드 : 콜백함수로, app.HTTPmethod(path, 핸들러) 요청에 의해 호출되는 메소드

    // youtubver-demo.js
    
    app.delete('/youtubers/:id', (req, res) =>{
        let {id} = req.params
        id = parseInt(id)
        var youtuber =db.get(id)
    
        if(youtuber){
            
            const channelTitle = youtuber.channelTitle
        db.delete(id)
    
        res.json({
            message :`${channelTitle}님, 아쉽지만 우리 인연은 여기까지 인가요..`
        })
        }else{
            message : `요청하신 ${id}번은 없는 유튜버입니다.`
        }
    
    })
    
    • 거꾸로 해서 이해하기 쉽게 리팩토링

    json array, find(), “찐”예외처리

    // exception-demo.js
    // 과일 전체조회
    const express = require('express')
    const app = express()
    app.listen(1234)
    
    const fruits = [
        { id : 1, name : 'apple'},
        { id : 2, name : 'orange'},
        { id : 3, name : 'strawberry'},
        { id : 4, name : 'blueberry'}
    ]
    
    // 과일 전체 조회
    app.get('/fruits', (req,res) =>{
        res.json(fruits)
    })
    
    // exception-demo.js
    // 과일 개별조회
    app.get('/fruits/:id', (req, res)=>{
        let id  = req.params.id
        let fruit = fruits[id]
    
        res.json(fruit)  
    })
    
    • id : 1을 원했지만
    • 결과 값는 id : 2가 나옴
    • arr는 인덱스로 받음
    • 어떻게 해야될까 ❓
      • let fruit = fruits[id-1]
      foreach 해준다.
       // fruits 배열 안에 있는 객체 중, 
       // id 값이 params.id랑 같은 객체를 찾겠다
       var findFruit = 
              fruits.find(f => f.id == id)
      
      둘중 하나.
    • var findFruit = "" fruits.forEach(function(fruit){ if(fruit.id == id){ findFruit = fruit } })
    • id -1 해주거나
    • 지금 예외가 터져야되는 데, 200 OK 가 나옴.
    // exception-demo.js
     if(findFruit) // finFruits가 있으면 
            res.json(findFruit)
        else  // 예외를 터트린다. = http status code 성공x 실패 !라고 알려준다.
            res.status(404).send(
                "전달주신 id로 저장된 과일이 없습니다."
            )
    

    예외가 잘 터트려짐.

    == vs === 자료형과 상관있

    // equal-demo.js
    // == 과 ===의 차이
    
    if(1 == "1"){  // 자료형 상관 없이
        console.log("== 1과 '1'은 같아")
    }else{
        console.log("1과 '1'같지 않다.")
    }
    
    if(1 === "1"){ // 자료형 상관 있
        console.log("1과 '1'은 같아")
    }else{
        console.log("=== 1과 '1'같지 않다.")
    }
    

    Youtuber demo 예외 고도화 : map은 undefined가 아닙니다.

    // youtuber-demo.js
    app.get('/youtubers', (req, res)=>{
        var youtubers = {}
    
        if(db){
            db.forEach(function(value, key){
                youtubers[key] = value
            });
        
            res.json(youtubers)
        }else{
            res.status(404).json({
                message : "조회할 유튜버가 없습니다."
            })
        }
       
    })
    
    • map(0) {} 도 있는 존재 하기 때문에 404가 아니라 200을 status로 보여주는 거임.
    • 그러면 어떻게 해야될까 ❓
    • if(db.size !==0)으로 수정해준다.

    Youtuber demo 예외 고도화 : post

    post body 값에 원래는 “김유튜버”라고 값을 넣어줬는 데, 만약에 body값을 안보내주면?

    {
        "channelTitle" : "김유튜버",
        "sub" : 0,
        "videoNum" : 0
    }
    

    ???? 정상 작동 한다고 해버림. 예외처리

    • 어떻게 하면 좋을까 ❓
      // youtuber-demo.js
      app.use(express.json()) // http의 모듈인 미들웨어 : json 설정
      app.post('/youtubers', (req, res)=>{
          **const channelTitle = req.body.channelTitle**
          **if(channelTitle){**
               // 등록이란 Map(db)에 저장(set)해줘야된다.
          db.set(id++, req.body) // 지금은 저장이 같은 번호로 됨. -> id++해줌으로 3저장 3++ 4저장 4++,..
      
          res.json({
              message : `${db.get(id-1).channelTitle}님, 유튜버 생활을 응원합니다.`
          }) 
          }else{
              **res.status(400).json({**
                  message : "요청 값을 제대로 보내주세요."
              })
          }   
      })
      
    • req body에 채널타이틀 있어?

    200 : 조회 성공 201 : 등록 성공 고도화

    if(channelTitle){
             // 등록이란 Map(db)에 저장(set)해줘야된다.
        db.set(id++, req.body) // 지금은 저장이 같은 번호로 됨. -> id++해줌으로 3저장 3++ 4저장 4++,..
    
        **res.status(201).json({**
            message : `${db.get(id-1).channelTitle}님, 유튜버 생활을 응원합니다.`
        }) 
        }else{
            res.status(400).json({
                message : "요청 값을 제대로 보내주세요."
            })
        }   
    })
    

    미니 프로젝트 시작

    <aside> 💡 진짜 유튜브 운영하는 것처럼 해볼까요?

    </aside>

    • [ ] 회원 가입
    1. 로그인
    2. 회원 가입
    3. 회원 정보 조회
    4. 회원 탈퇴
    • 회원은 계정 당 채널 100개를 가질 수 있다.
      • 채널 생성
      • 채널 수정
      • 채널 삭제

    로그인 페이지

    회원 가입 페이지

    마이 페이

    회원 API 설계

    • [ ] 회원 가입
    1. 로그인 POST(post는 body가 있다..) /login
    • req : (BODY) id, pw
    • res : $(name)님 환영합니다. 👉 메인 페이지 (고도화)
    1. 회원 가입 POST /join
    • req : (body)id, pw, 이름
    • res : $(name)님 환영합니다. 👉 로그인 페이지(고도화)
    1. 회원 정보 개별 조회 GET /users/:id
    • req : URL (user id)
    • res : userid, name
    1. 회원 개별 탈퇴 DELETE /users/:id - req : URL (id)
    • res : $(name)님 다음에 또 뵙겠습니다. . or 메인 페이지 ****
    • 회원은 계정 당 채널 100개를 가질 수 있다.
      • 채널 생성
      • 채널 수정
      • 채널 삭제

    회원 API 코드 툴

    // user-demo.js
    
    // express module setting
    const express = require('express')
    const app = express()
    app.listen(7777)
    
    // 로그인
    app.post('/login', (req, res)=>{
        
    })
    // 회원가입
    app.post('/join', (req, res)=>{
        
    })
    // 회원 개별 조회
    app.post('/users/:id', (req, res)=>{
        
    })
    // 회원 개별 탈퇴
    app.post('/users/:id', (req, res)=>{
        
    })
    

     

    'TIL > 교육 내용 정리' 카테고리의 다른 글

    [데브코스] 28일차 TIL  (0) 2024.05.05
    [데브코스] 27일차 TIL  (0) 2024.05.04
    [데브코스] 25일차 TIL  (0) 2024.05.04
    [데브코스] 24일차 TIL  (0) 2024.05.04
    [데브코스] 23일차 TIL  (0) 2024.04.30
Designed by Tistory.