Router-level 미들웨어는 express.Router() 인스턴스에 바인딩되는 점을 제외하면 application-level 미들웨어와 동일하게 작동한다.
router.use () 및 router.METHOD () 함수를 사용하여 Router-level 미들웨어를 로드한다.
var express = require('express')
var app = express()
var router = express.Router()
// 마운트 경로 없는 미들웨어 기능.
//router에 대한 모든 요청에서 실행된다.
router.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
// 미들웨어 하위 스택은 / user / : id 경로에 대한 모든 유형의 HTTP 요청에 대한 요청 정보를 표시합니다.
router.use('/user/:id', function (req, res, next) {
console.log('Request URL:', req.originalUrl)
next()
}, function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
// / user / : id 경로에 대한 GET 요청을 처리하는 미들웨어 하위 스택
router.get('/user/:id', function (req, res, next) {
// 사용자 ID가 0이면 다음 라우터로 건너 뜁니다.
if (req.params.id === '0') next('route')
// 그렇지 않으면이 스택의 다음 미들웨어 함수에 제어를 전달합니다.
else next()
}, function (req, res, next) {
// 일반 페이지를 렌더링
//res.render('regular')
res.send('regular')
})
// 특수 페이지를 렌더링하는 / user / : id 경로에 대한 핸들러
router.get('/user/:id', function (req, res, next) {
console.log(req.params.id)
//res.render('special')
res.send('special')
})
// router를 app에 마운트하고 createServer에 입력한다.
app.use('/', router)
http.createServer(app).listen(3000, () => { console.log('expresst서버가 3000번 포트에서 시작됨') })
res.render () 함수는 템플릿을 컴파일하고, 거기에 지역을 삽입하고,이 두 가지에서 html 출력을 생성합니다. 뷰 템플릿이 없어 render에서 에러가 발생한다. render 대신 send로 변경하고 출력결과를 확인하였다.
서버가 실행되면 현재 시간을 출력한다 따로 마운트 경로가 없기 때문에 다른 요청이 생길 때 마다 시간을 표시한다. 이제 경로를 /user/:id로 지정하면 터미널에 Request URL: /user/:id
과 Request Type: GET
이 출력된다. next() 덕분에 다음 router.get이 실행된다.
resparams.id
가 0이 아니므로 next('route')
가 실행되지 않고 다음 미들웨어를 실행하여 웹 화면에 reqular를 출력한다. special은 출력되지 않는다.