[Node][Express] route & Router 메소드

2024. 8. 19. 11:07·Backend/Node.js

route( )

미들웨어의 기능을 추가하다보면 이렇게 중복되는 경로들이 많아지는 경우가 있습니다.

아래 코드의 경우 /products의 경로가 중복해서 나타나는 것을 볼 수 있습니다.

import express from 'express'

const app = express()

app.get('/products', (req, res) => {
    res.json({ message: 'get Product list' })
})

app.post('/products', (req, res) => {
    res.json({ message: 'add Product' })
})

app.patch('/products/:id', (req, res) => {
    res.json({ message: 'modify Product' })
})

app.delete('/products/:id', (req, res) => {
    res.json({ message: 'delete Product' })
})

app.listen(3000, () => {
    console.log('Server is listening on port 3000')
})

express의 route( ) 메소드를 사용하면 자주 사용되는 경로를 묶어서 간단하게 작성할 수 있습니다.

import express from 'express'

const app = express()

app.route('/products')
    .get((req, res) => {
        res.json({ message: 'get Product list' })
    })
    .post((req, res) => {
        res.json({ message: 'add Product' })
    })

app.route('/products/:id')
    .patch('/products/:id', (req, res) => {
        res.json({ message: 'modify Product' })
    })
    .delete('/products/:id', (req, res) => {
        res.json({ message: 'delete Product' })
    })

app.listen(3000, () => {
    console.log('Server is listening on port 3000')
})

Router( )

route를 이용해서 중복되는 경로의 기입을 줄일 수 있지만, 경로 자체가 여러가지라면 route의 개수 또한 많아지게 됩니다.

이 때 express의 Router() 메소드를 사용하면 비슷한 기능을 하는 route()들을 하나의 Router로 묶어 app과 연결시킬 수 있습니다.

import express from 'express'

const app = express()

const sampleRouter = express.Router()

sampleRouter.route('/')  // app 대신 sampleRouter에 route를 사용합니다.
    .get((req, res) => {
        res.json({ message: 'get Product list' })
    })
    .post((req, res) => {
        res.json({ message: 'add Product' })
    })

sampleRouter.route('/:id')  // app 대신 sampleRouter에 route를 사용합니다.
    .patch('/products/:id', (req, res) => {
        res.json({ message: 'modify Product' })
    })
    .delete('/products/:id', (req, res) => {
        res.json({ message: 'delete Product' })
    })
    
app.use('/products', sampleRouter) // sampleRouter를 미들웨어로 사용합니다.

app.listen(3000, () => {
    console.log('Server is listening on port 3000')
})

또한 미들웨어는 Router 수준에서도 정의할 수 있습니다.

sampleRouter.use((req, res, next) => {
    console.log('this is always exectued in the sampleRouter')
    next()
})

이렇게 생성하는 Router들은 다른 파일에서 작성할 수도 있기 때문에 미들웨어를 모듈화 하는데 사용될 수 있습니다. 

다음과 같은 구조로 미들웨어를 구성할 수 있습니다.

 

728x90

'Backend > Node.js' 카테고리의 다른 글

[Node][Express] Middleware | 03. multer  (0) 2024.08.20
[Node][Express] Middleware | 02. morgan  (0) 2024.08.20
[Node][Express] Middleware | 01. cookie-parser  (0) 2024.08.19
[Node][Express] 내장 미들웨어 json() / urlencoded() / static()  (0) 2024.08.18
[Node][Express] all & use 메소드  (0) 2024.08.16
'Backend/Node.js' 카테고리의 다른 글
  • [Node][Express] Middleware | 03. multer
  • [Node][Express] Middleware | 02. morgan
  • [Node][Express] Middleware | 01. cookie-parser
  • [Node][Express] 내장 미들웨어 json() / urlencoded() / static()
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (262)
      • CS (40)
        • ML (3)
        • CV (2)
        • PS (34)
      • Reveiw (17)
        • Paper (17)
        • Github (0)
      • Pytorch (5)
      • Language (58)
        • Python (7)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (71)
        • React (8)
        • SolidJS (20)
        • CSS (12)
      • UI (3)
      • Backend (15)
        • DB (17)
        • Node.js (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    html
    ML
    GAN
    react
    review
    Git
    frontend
    ps
    CSS
    PRISMA
    CV
    SOLID
    UI
    API
    mongo
    js
    Three
    CS
    vscode
    postgresql
    deploy
    figma
    C++
    Express
    backend
    ts
    DB
    PyTorch
    nodejs
    python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[Node][Express] route & Router 메소드
상단으로

티스토리툴바