미들웨어(Middleware)


조현영님의 Node.js 교과서의 내용을 공부하여 정리한 내용입니다.


6.3 미들웨어

미들웨어익스프레스의 핵심
요청과 응답의 중간(middle, 미들)에 위치하여 미들웨어라고 부른다.

  • 뒤에 나오는 라우터와 에러 핸들러 또한 미들웨어의 일종이므로 미들웨어가 익스프레스의 전부라고 해도 과언이 아니다.
  • 미들웨어는 요청과 응답을 조작하여 기능을 추가하기도 하고, 나쁜 요청을 걸러내기도 한다.

app.use의 역할

  • 미들웨어는 주로 app.use와 함께 사용된다.
  • 먼저 app.use의 역할에 대해 알아보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
...
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname,'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// 404 처리 미들웨어
app.use(function(req, res, next) {
next(createError(404));
});

// 에러 핸들러
app.use(function(err, req, res, next) {
res.locals.message = err.message;
res.locals.error = req.app.get('env') ==='development' ? err : {};

res.status(err.status || 500);
res.render('error');
});

module.exports = app;
  • app.js를 보면 수많은 use 메서드가 사용되고 있다는 걸 알 수 있다.
  • app.use 메서드의 인자로 들어 있는 함수가 미들웨어
  • 미들웨어는 use 메서드로 app에 장착한다.
  • 제일 위의 logger('dev')부터 시작하여 미들웨어들을 순차적으로 거친 후
    라우터에서 클라이언트로 응답을 보낸다.