미들웨어 동작 레벨은 두 가지로 나뉘어 진다.
애플리케이션 레벨
라우터 레벨
단계는 애플리케이션 => 라우터 단계로 실행순서가 이루어 진다.
애플리케이션 레벨과 라우터 레벨은 실행단계의 차이지 기능적으론 다른 점이 없다.
애플리케이션 분기 + 라우터 분기로 더 세세하게 요청 url을 분리하여 제어가 가능하다는 점
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
app.use('/', indexRouter);
app.use('/users', usersRouter);
위의 예는 애플리케이션 단계에서 '/' 와 '/users'로 URL을 분리하여 처리를 하도록 한것이다.
또한 callback 인자에 express.Router() 오브젝트를 생성하여 넣음으로 라우터 단계에서의 URL 제어도 가능 하도록 등록하였다.
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
console.log('originalUrl : '+req.originalUrl);
console.log('baseUrl : '+req.baseUrl);
console.log('path : '+req.path);
res.send('respond with a resource');
});
router.get('/user', function(req, res, next) {
console.log('originalUrl : '+req.originalUrl);
console.log('baseUrl : '+req.baseUrl);
console.log('path : '+req.path);
res.send('respond with a resource');
});
module.exports = router;
위의 예는 라우터 단계의 미들웨어다.
app.use() 처럼 router.use()도 쓸 수 있고 app.METHOD() 처럼 router.METHOD()도 사용 가능하다.
use와 METHOD의 다른점은 use()는 모든 METHOD에서 동작한다는 것이고 METHOD()는 지정된 요청(GET, POST, PUT, DELETE 등)에서만 동작을 한다는 것