Backend/Node.js
[Node][Express] route & Router 메소드
Rayi
2024. 8. 19. 11:07
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