Express + Typescript middleware

Simon·2024년 3월 15일
post-thumbnail

라우팅 처리 과정에서 미들웨어 함수를 사용해보려고 한다.

middlewares이름의 폴더를 만든후 appLogger.ts 파일 안에 코드 작성

특별한 기능이 있는 코드는 아니고 미들웨어로써 사용할 함수이다.

import express from "express";

let appLogger = (
  req: express.Request,
  res: express.Response,
  next: express.NextFunction
) => {
  // url, method, time, data
  let url = req.url;
  let method = req.method;
  let date = new Date().toLocaleDateString();
  let time = new Date().toLocaleTimeString();
  let result: string = `[${url}] [${method}] - [${date}] - [${time}]`;
  console.log(result);
  next(); // mandatory
};

export default appLogger;
  • req.url과 req.method 속성을 사용하여 요청 URL과 HTTP 메서드를 가져온다
  • new Date().toLocaleDateString()과 new Date().toLocaleTimeString() 메서드를 사용하여 현재 날짜와 시간을 문자열로 변환
  • 로그 메시지를 문자열 형식으로 만든 후 출력

여기서 주목해야 할 부분은 next() 함수 호출 부분인데 이 함수는 미들웨어 실행순서를 유지하기 위해 필수적인 부분이다. next 함수를 호출하지 않으면 요청 처리가 중단되고 이후의 미들웨어 또는 라우터가 실행되지 않는다.

아래 처럼 코드가 구성되어있고 api 요청시 결과가 잘 나오는걸 확인할 수 있다.

Server.ts

apiRouter.ts (apiRouter.get()안에 appLogger 전달)

실행 결과

참고로 server.ts 파일에 app.use(appLogger) 코드를 작성한다면 모든 경로에 대해서 미들웨어 함수가 실행된다.

profile
포기란 없습니다.

0개의 댓글