<ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค ํ’€์Šคํƒ> 2026-01-27 TIL(2) ํ•ธ๋“ค๋Ÿฌ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ, == vs ===

๐Ÿค” ํ•ธ๋“ค๋Ÿฌ(handler)๋ž€?

: HTTP request๊ฐ€ ๋‚ ์•„์˜ค๋ฉด ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์†Œ๋“œ

- ๋…ธ๋“œ : ์ฝœ๋ฐฑํ•จ์ˆ˜!, app.HTTPMETHOD(path, ํ•ธ๋“ค๋Ÿฌ)

 


โ—๏ธ"์ฐ" ์˜ˆ์™ธ์ฒ˜๋ฆฌ

๐Ÿ‘‰๐Ÿป ํด๋ผ์ด์–ธํŠธ์™€ ์†Œํ†ต์„ ์ •ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ!

 

์šฐ์„  ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ „ ํŒŒ์ผ

import express from 'express'
const app = express()
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000')
})

const fruits = [
    {id : 1, name : 'apple'},
    {id : 2, name : 'orange'},
    {id : 3, name : 'strawberry'},
    {id : 4, name : 'blu eberry'},
]

// ๊ณผ์ผ ์ „์ฒด ์กฐํšŒ
app.get('/fruits', (req, res) => {
    res.json(fruits) //json array
})

// ๊ณผ์ผ ๊ฐœ๋ณ„ ์กฐํšŒ
app.get('/fruits/:id', (req, res) => {
    let id = req.params.id
    //let fruit = fruits[id-1]
    var findFruit = fruits.find(f => f.id == id)
    // fruits ๋ฐฐ์—ด ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด ์ค‘, id๊ฐ’์ด params.id๋ž‘ ๊ฐ™์€ ๊ฐ์ฒด 

    // fruits.forEach(function(fruit){
    //     if(fruit.id == id) {
    //         findFruit = fruit
    //     }
    // })

    res.json(findFruit)
})

 

์ด ์ฝ”๋“œ์—์„œ fruits/7 ์ž…๋ ฅ์‹œ

 

์—†๋Š” ๋ฐ์ดํ„ฐ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  200 OK๋ฅผ ๋ณด๋‚ด๊ณ ์žˆ์Œ

๐Ÿ‘‰๐Ÿป ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ž!

 

// ๊ณผ์ผ ๊ฐœ๋ณ„ ์กฐํšŒ
app.get('/fruits/:id', (req, res) => {
    let id = req.params.id
    //let fruit = fruits[id-1]
    var findFruit = fruits.find(f => f.id == id)
    // fruits ๋ฐฐ์—ด ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด ์ค‘, id๊ฐ’์ด params.id๋ž‘ ๊ฐ™์€ ๊ฐ์ฒด 

    if(findFruit) res.json(findFruit)
    else //์˜ˆ์™ธ๋ฅผ ํ„ฐํŠธ๋ฆฐ๋‹ค = http status code ์„ฑ๊ณต X ์‹คํŒจ!
    {
        res.status(404).send(
            "์ „๋‹ฌ์ฃผ์‹  id๋กœ ์ €์žฅ๋œ ๊ณผ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค."
        )
    }
})


== vs === 

// ==, === ์ฐจ์ด

if(1 == "1"){ //์ž๋ฃŒํ˜•์€ ์ƒ๊ด€ ์—†์ด, ๊ฐ’๋งŒ ๋น„๊ต
    console.log("๊ฐ™๋‹ค") // โœจ
} else {
    console.log("๊ฐ™์ง€ ์•Š๋‹ค")
}


if(1 === "1"){ // ์ž๋ฃŒํ˜•๋„ ์ƒ๊ด€์žˆ์Œ!! 
    console.log("๊ฐ™๋‹ค")
} else {
    console.log("๊ฐ™์ง€ ์•Š๋‹ค") //โœจ
}

youtuber ํŒŒ์ผ์—์„œ์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋‹ค์‹œ ๋„์ „!

 

<์ „์ฒด ์กฐํšŒ> ..(์ด์™ธ์˜ ๊ฒƒ๋„ ๋น„์Šทํ•จ)

app.get('/youtubers',  function(req, res){
    var youtubers = {} // ํด๋ฆฌ์–ด ์ฝ”๋“œ์—์„œ๋Š” ๋ฐ์ดํ„ฐํ˜•ํƒœ ๋„ฃ์ง€ ์•Š์Œ. 
    if(db.size !== 0) {
        db.forEach(function(value, key){
            youtubers[key] = value
        });

        res.json(youtubers)
    } else {
        res.status(404).json({
            message : "์กฐํšŒํ•  ์œ ํŠœ๋ฒ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
        })
    }
})

 

๐Ÿค” if(db) ๋Š” ์™œ์•ˆ๋ ๊นŒ?

: db๋Š” map์ธ๋ฐ, ๋ชจ๋“  ๊ฐ’์„ ๋‹ค ๋นผ๋„ map์ด๋ผ๋Š” ๊ฐ์ฒด๋Š” ๋‚จ์•„์žˆ๊ธฐ ๋•Œ๋ฌธ์— undefinded์ด ๋  ์ˆ˜ ์—†์Œ 

 

<์œ ํŠœ๋ฒ„ ๋“ฑ๋ก>

์˜ˆ์™ธ : ํ•ญ๋ชฉ์ด ์ „๋ถ€ ๋“ฑ๋ก๋˜์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ์Œ

- 2** : ์„ฑ๊ณต

1) ์กฐํšŒ/์ˆ˜์ •/์‚ญ์ œ ์„ฑ๊ณต : 200

2) ๋“ฑ๋ก ์„ฑ๊ณต : 201

4** : ํด๋ผ์ด์–ธํŠธ ์ž˜๋ชฌ

1) 400 : ์š”์ฒญํ•œ ์—ฐ์‚ฐ(์ฒ˜๋ฆฌ)๋ฅผ ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(req)๊ฐ€ ๋œ ์™”์„ ๋–„ 

2) 404 : ์ฐพ๋Š” ํŽ˜์ด์ง€(๋ฆฌ์†Œ์Šค) ์—†์Œ (url์— ๋งž๋Š” api ์—†์Œ) 

app.use(express.json()) // http ์™ธ ๋ชจ๋“ˆ์ธ '๋ฏธ๋“ค์›จ์–ด': json ์„ค์ •
app.post('/youtubers', (req, res) => {
    const channelTitle = req.body.channelTi
    if(req.body.channelTitle){
        //๋“ฑ๋ก : Map(db)์— ์ €์žฅ(put) ํ•ด์ค˜์•ผ๋จ
        db.set(id++, req.body)

        res.status(201).json({
            message : `${db.get(id-1).channelTitle}๋‹˜, ์œ ํŠœ๋ฒ„ ์ƒํ™œ์„ ์‘์›ํ•ฉ๋‹ˆ๋‹ค!`
        })
    } else {
        res.status(400).json({
            message : "์š”์ฒญ ๊ฐ’์„ ์ œ๋Œ€๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”."
        })
    }
})

๋“ฑ๋ก ์„ฑ๊ณต 201

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋œ ์˜ค๋Š” ์˜ค๋ฅ˜ 400