Node.js + Express를 이용한 RESTful API 예제(4) - Middleware 함수를 이용한 log 공통처리

minhye kim·2024년 5월 19일

nodejs

목록 보기
4/10

Middleware란?

미들웨어는 요청과 응답 사이에서 실행되는 함수 또는 객체입니다. 미들웨어를 사용하여 요청을 처리하기 전 또는 후에 작업을 수행할 수 있습니다. 예를 들어, 미들웨어를 사용하여 요청을 로그하거나 인증을 수행하거나 응답 헤더를 설정할 수 있습니다.

미들웨어의 유형

  • 응용 프로그램 수준 미들웨어: 이러한 미들웨어는 모든 요청에 적용됩니다.
  • 라우터 수준 미들웨어: 이러한 미들웨어는 특정 라우터에 적용됩니다.
  • 오류 처리 미들웨어: 이러한 미들웨어는 오류가 발생할 때 실행됩니다.
  • 미들웨어 기능은 다음 작업을 수행할 수 있습니다.

중요: 호출된 미들웨어에서 요청-응답 주기를 종료하지 않으면 다음 미들웨어 기능으로 제어를 전달하기 위해 next()를 호출해야 합니다. 그렇지 않으면 요청이 중단된 상태로 유지됩니다.

미들웨어 함수 작성 및 사용

function middleware(req, res, next) {
  // 여기서 요청 및 응답 객체에 액세스하고 작업을 수행할 수 있습니다.
  next();
}

//미들웨어 함수를 사용하려면 다음과 같이 app.use() 메서드에 전달합니다.
app.use(middleware);

//미들웨어 함수를 특정 라우터에 적용하려면 다음과 같이 app.use() 메서드에 라우터 경로를 전달합니다.
app.use('/users', middleware);

//미들웨어 함수를 오류 처리에 사용하려면 다음과 같이 app.use() 메서드에 네 번째 인수를 전달합니다.
app.use(function(err, req, res, next) {
  // 여기서 오류를 처리할 수 있습니다.
});

프로젝트에 적용 예제

모든 요청에 대해 요청 URL, Method, request 파라메터를 출력하는 로그를 적용했습니다.

//common log
app.use((req: Request, res: Response, next: NextFunction) => {
  console.log('==================');
  console.log('requestURL:' + req.url);
  console.log('requestMethod:' + req.method);
  if (req.method !== 'GET') {
    console.log('requestBody:' + JSON.stringify(req.body));
  } else {
    console.log('requestQuery:' + JSON.stringify(req.query));
  }
  next();
});

Reference
https://expressjs.com/en/guide/writing-middleware.html
https://velog.io/@dkvlg/Express-js%EC%9D%98-next-%ED%95%A8%EC%88%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

profile
안녕하세요. 블로그를 시작하게 되었습니다! 앞으로 유용한 정보와 좋은 내용을 많이 공유할게요:)

0개의 댓글