본문 바로가기
서버 인프라, 백엔드/Express

express의 middleware란?

by 번데기 개발자 2019. 3. 12.
반응형
개요

 

미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수에 대한 엑세스 권한을 갖는 함수 입니다.
 
그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시됩니다.
 
 
미들웨어 함수는 다음과 같은 테스크를 수행할 수 있습니다.
 
  • 모든 코드를 실행
  • 요청 및 응답 오브젝트에 대한 변경을 실행
  • 요청 - 응답 주기를 종료
  • 스택 내의 그 다음 미들웨어를 호출
 
현재의 미들웨어 함수가 요청-응답 주기를 종료하지 않는 경우에는 next()를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야 합니다.
 
그렇지 않으면 요청은 정지된 채로 방치됩니다.
 
예시)
 
 
 
Hello World 애플리케이션에 대한 2개의 미들웨어 함수를 사용한 예제
 
 
 
 
 
개발
 
 
아래에는 “myLogger”라는 이름의 미들웨어 함수에 대한 간단한 예가 표시되어 있습니다.
 
이 함수는 앱에 대한 요청이 해당 함수를 거쳐 전달될 때 단순히 “LOGGED”를 인쇄합니다.
 
해당 미들웨어 함수는 LOGGED 라는 이름의 변수에 지정되어 있습니다.
 
 
 
미들웨어 함수를 로드하려면 미들웨어 함수를 지정하여 app.use를 호출하면 됩니다.
 
예를 들면 다음의 코드는 루트경로(/)로 라우팅하기 전에 myLogger 미들웨어 함수를 로드합니다.
 
 
 
 
앱이 요청을 수신할 때 마다 앱은 “LOGGED”라는 메세지를 터미널에 인쇄합니다.
 
미들웨어의 로드 순서는 중요하며, 먼저 로드되는 미들웨어 함수가 먼저 실행됩니다.
 
루트 경로에 대한 라우팅 이후에 myLogger가 로드되면, 루트 경로의 라우트 핸들러가 요청-응답 주기를 종료하므로 요청은 절대로 myLogger에 도달하지 못하며 앱은 “Logged”를 인쇄하지 않습니다.
 
미들웨어 함수 myLogger는 단순히 메세지를 인쇄한 후 next() 함수를 호출하여 스택 내의 그 다음 미들웨어 함수에 요청을 전달합니다.
 
다음 예에서는 requestTime이라는 특성을 요청 오브젝트에 추가합니다.
 
해당 미들웨어 함수는 requestTime이라고 명명하겠습니다.
 
 
 
 
이제 앱은 requestTime 미들웨어 함수를 사용합니다.
 
또한 루트 경로 라우트의 콜백 함수는 미들웨어 함수가 req(요청 오브젝트)에 추가하는 특성을 사용합니다.
 
 
 
 
앱의 루트에 대한 요청을 실행할 때, 앱은 이제 요청의 타임스템프를 브라우저에 표시합니다.
 
사용자는 요청 오브젝트, 응답 오브젝트, 스택 내의 다음 미들웨어 함수, 그리고 모든 Node.js API에 대한 엑세스 권한을 가지고 있으므로, 미들웨어 함수에 대한 가능성은 끝이 없습니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

반응형