Express Middleware

Middelware?


// 미들웨어 = 함수
function helloMiddleware(res, req, next) {
  console.log('hello')
  next()
}

app.use(helloMiddleware)
        

Middleware

  • 함수, 즉 안에서 어떤 작업이든 가능
  • request 객체, response 객체, next 함수를 인자로 받음
  • request 객체, response 객체를 조작해서 기능 구현
  • 다음 미들웨어를 동작시키기 위해 next 함수를 인자 없이 호출
  • 등록된 순서대로 실행됨

app.use

미들웨어를 앱 전체에서 동작하도록 주입하거나


app.use(helloMiddleware)
        

특정 경로에서만 동작하도록 주입


app.use('/some-path', helloMiddleware)
        

한 번에 여러 개 주입


app.use(middleware1, middleware2, middleware3, ...)
        

미들웨어로 하는 일

  • 로깅
  • HTTP body를 객체로 변환
  • 사용자 인증
  • 권한 관리
  • ...

Why middleware?

미들웨어로 할 수 있는 모든 일은 라우트 핸들러에서도 할 수 있으나, 여러 라우터에서 사용해야 하는 기능을 중복 작성하는 불편을 덜고 코드를 재사용하기 위해 미들웨어를 사용하는 것

미들웨어 생태계

Express resource

NPM search

미들웨어 예제

Link

미들웨어 vs 라우트 핸들러

  • 라우트 핸들러도 미들웨어
  • 즉, next 함수를 인자로 받는 것이 가능

app.get('/', (req, res, next) => {
  if (!someCondition) {
    next() // 요청을 처리를 하지 않고 다른 핸들러로 넘김
  } else {
    res.send('hello')
  }
})
        

실습

Custom 404 page

Link

에러 처리 미들웨어

Link

Next

Cookie