내일배움캠프 Node.js 본캠프 23일차

김선우·2024년 9월 9일
post-thumbnail

미들웨어(Middleware)

서버의 요청-응답 과정에서 중간에 위치하여 특정 기능을 수행하는 함수.
=> 모든 요청에 대해 로그를 남기거나, 특정 사용자만 API를 접근하게하고싶을때 사용 가능.

Express.js에서의 미들웨이

  • Express.js의 핵심 기능 중 하나, 다양한 기능을 제공.
app.use((req, res, next) => {
  // 필요한 코드
});
  • req : 요청(Request)에 대한 정보가 담겨있는 객체
    => HTTP Headers, Query Parameters, URL등 브라우저가 서버로 보내는 정보가 담겨짐.
  • res : 응답을 위한 기능이 제공.
    => 어떤 HTTP Status Code로 응답할지, 어떤 데이터 형식으로 응답할지, 헤더는 어떤값을 넣어 응답할지 등 다양한 기능을 제공.
  • next : 다음 스택으로 정의된 미들웨어를 호출.

미들웨어를 사용하는 상황.

만들기 위한 기능에 다양하게 사용 가능하고, 관리 면에서도 많은 이점을 가져옴.

  • 인증 미들웨어 : 사용자가 로그인 상태인지 확인.
  • 로깅 미들웨어 : 클라이언트의 요청에 대한 정보를 기록.
  • 에러 핸들링 미들웨어 : 에러 처리.

여러 미들웨어가 겹치는 경우 동작 방식

  • 일반적으로 어플리케이션에 등록된 순서로 실행.
  • 여러개가 겹칠 경우 첫번째 미들웨어부터 순차적으로 진입.

※ res.send()나 res.json()등의 메서드를 호출 하는 경우(현재 미들웨어에서 응답을 보내는 경우)에는 next()를 호출하면 안됨.
=> 호출하게 되면 이미 요청이 종료된 상태에서 다른 미들웨어가 응답을 보내려고해 중복된 요청이 전달되는 문제가 발생하게됨.

Router와 미들웨어의 차이

Router는 미들웨어 기반으로 구현된 객체 => 미들웨어와 동일한 방식으로 작동.

  • Router는 미들웨어 함수를 특정 경로로 바인딩하는 역할, 요청이 들어온 경로에 따라 서로 다른 미들웨어를 실행하도록 도와줌.

Express.js에서 미들웨어의 실행

  • app.use(Middleware) : 모든 요청에서 미들웨어가 실행.
  • app.use(’/api’, Middleware) : /api로 시작하는 모든 요청에서 미들웨어를 실행.
  • app.post(’/api’, Middleware, (req,res,)=>{} ) : /api로 시작하는 POST요청에서 미들웨어를 실행.

0개의 댓글