>웹 프론트엔드 >JS 튜토리얼 >Express.js의 미들웨어와 내부 작업 이해

Express.js의 미들웨어와 내부 작업 이해

Patricia Arquette
Patricia Arquette원래의
2024-12-22 21:21:12755검색

Understanding Middlewares in Express.js and Their Internal Working

Express.js에서 미들웨어는 요청(req), 응답(res) 및 next라는 세 번째 매개변수에 액세스할 수 있는 특수 함수입니다. 일반 경로 핸들러와 달리 미들웨어는 기본 비즈니스 로직 이전에 외부 로직을 실행하여 애플리케이션 흐름을 제어하는 ​​데 중요한 역할을 합니다.

미들웨어는 어떻게 작동하나요?

HTTP 요청이 Express.js 서버에 도달하면 일련의 미들웨어 기능을 통해 전달됩니다. 각 미들웨어는 다음을 수행할 수 있습니다.

  • 요청 개체를 수정합니다(예: 데이터 첨부, 토큰 확인).
  • 응답 개체를 수정합니다(예: 조기에 응답 보내기).
  • next() 함수를 사용하여 스택의 다음 미들웨어에 제어를 전달합니다.

미들웨어가 next()를 호출하지 않으면 요청-응답 주기가 여기서 종료되고 더 이상 로직(라우트 핸들러 포함)이 실행되지 않습니다.

미들웨어를 사용하는 이유는 무엇입니까?

미들웨어는 요청을 처리하기 전에 재사용 가능한 논리를 추가해야 하는 시나리오에 적합합니다. 예를 들면 다음과 같습니다.

  • 인증: 사용자가 로그인했는지 확인합니다(예: 유효성 검사 - JWT 토큰).
  • 승인: 사용자에게 특정 작업을 수행하는 데 필요한 권한이 있는지 확인합니다(예: 관리자가 콘텐츠를 삭제할 수 있음).
  • 검증 요청: 필수 입력이 모두 제공되었는지 확인합니다.
  • 로깅 및 모니터링: 분석 또는 디버깅을 위해 들어오는 요청의 세부 정보를 기록합니다.
  • 오류 처리: 의미 있는 응답을 보내기 위해 전역적으로 오류를 포착합니다.

미들웨어 정의 및 사용

미들웨어 기능은 다음과 같습니다.

  • req(요청): 들어오는 HTTP 요청에 대한 정보를 포함합니다(예: 헤더, 본문, 매개변수).
  • res(응답): 클라이언트에 데이터를 다시 보내는 데 사용됩니다. next(): 라인의 다음 미들웨어에 제어권을 넘겨주는 함수입니다.

미들웨어 흐름: 실행 순서

미들웨어 순서가 중요합니다! Express는 정의된 순서대로 미들웨어를 순차적으로 실행합니다.

미들웨어가 경로 뒤에 정의되면 해당 경로에는 영향을 미치지 않습니다. 이것이 바로 app.js의 경로 이전에 미들웨어를 선언해야 하는 이유입니다.

예:

내부 실행 흐름

단계별 진행 상황은 다음과 같습니다.

  • 수신 요청: 요청이 서버에 도달했습니다.
  • 미들웨어 실행:
    • 미들웨어는 req.user.role을 확인합니다.
    • 역할이 "admin"인 경우 next()를 호출하여 다음 미들웨어나 경로로 제어권을 전달합니다.
    • 그렇지 않은 경우 미들웨어는 403 Forbidden 응답을 보내 요청을 종료합니다.
  • 라우트 핸들러: next()가 호출되면 해당 라우트 핸들러(예: /admin/dashboard)가 실행됩니다.

예제 흐름:

  • "admin" 역할을 가진 사용자가 /admin/dashboard를 요청합니다.
    • 미들웨어는 "액세스 허용"을 기록하고 next()를 호출합니다.
    • 라우트 핸들러가 "관리 대시보드에 오신 것을 환영합니다!"를 보냅니다.
  • "user" 역할을 가진 사용자가 /admin/dashboard를 요청합니다.
    • 미들웨어는 "액세스 거부됨"을 기록하고 "이 리소스에 대한 액세스 권한이 없습니다"를 보냅니다.

주요 시사점

  • 미들웨어는 게이트키퍼와 같습니다. 기본 경로 로직이 실행되기 전에 무슨 일이 일어날지 결정합니다.
  • 다음 미들웨어나 경로로 흐름이 계속되도록 하려면 next()를 사용하세요.
  • 항상 경로를 적용하기 전에 중요한 미들웨어를 정의하여 적용하세요.
  • next()를 호출하지 않거나 응답을 보내지 않으면 요청이 중단됩니다(시간 초과).

위 내용은 Express.js의 미들웨어와 내부 작업 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.