2. Router-level 미들웨어

unow30·2020년 10월 18일
0

experss

목록 보기
3/8

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/:idRequest Type: GET이 출력된다. next() 덕분에 다음 router.get이 실행된다.

resparams.id가 0이 아니므로 next('route')가 실행되지 않고 다음 미들웨어를 실행하여 웹 화면에 reqular를 출력한다. special은 출력되지 않는다.

0개의 댓글