미들웨어를 사용할 때 유용한 패턴 한 가지를 소개합니다. 미들웨어 안에 미들웨어를 넣는 방식입니다. 다음 예제의 두 방식은 같은 기능을 합니다.
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); } });
앞으로 예제에서 위와 같은 패턴을 사용하는 경우를 볼 수 있습니다.