더북(TheBook)

미들웨어를 사용할 때 유용한 패턴 한 가지를 소개합니다. 미들웨어 안에 미들웨어를 넣는 방식입니다. 다음 예제의 두 방식은 같은 기능을 합니다.

app.use(morgan('dev'));
// 또는
app.use((req, res, next) => {
  morgan('dev')(req, res, next);
});

이 패턴이 유용한 이유는 기존 미들웨어의 기능을 확장할 수 있기 때문입니다. 예를 들어 다음과 같이 분기 처리를 할 수도 있습니다. 조건문에 따라 다른 미들웨어를 적용하는 코드입니다.

app.use((req, res, next) => {
  if (process.env.NODE_ENV === 'production') {
    morgan('combined')(req, res, next);
  } else {
    morgan('dev')(req, res, next);
  }
});

앞으로 예제에서 위와 같은 패턴을 사용하는 경우를 볼 수 있습니다.