Node/익스프레스 웹 서버 만들기

미들웨어

webmaster 2022. 9. 9. 22:30
728x90

미들웨어

app

  • 익스프레스는 미들웨어로 구성된다.
  • 요청과 응답의 중간에 위치하여 app.use(미들웨어)로 장착할 수 있다.
    • 위에서 아래로 순서대로 실행된다
  • 미들웨어는 req, res, next가 매개변수인 함수이다.
    • req: 요청, res: 응답 조작 가능
    • next()로 다음 미들웨어로 넘어감 
  • 익스프레스 미들웨어들도 다음과 같이 축약 가능
    • static 미들웨어에서 파일을 찾으면 next 호출 하므로 json, urlencoded, cookieParser 실행되지 않음
    • 순서가 중요

에러 처리 미들웨어

app.use((err, req, res, next) => {
  //에러 미들웨어는 반드시 4개를 모두 써야한다.
  console.error(err);
  res.status(500).send("에러가 발생했습니다."); //status 코드를 속여서 전달할 수도 있다
});
  • 에러가 발생하면 에러 처리 미들웨어로 처리해야 한다
  • err, req, rs, next까지 매개변수가 4개를 반드시 써야 한다
  • 첫 번째 err에는 에러가 관한 정보가 담긴다.
  • res.status 메서드로 HTTP 상태 코드를 지정 가능(기본값 200)하다.
  • 에러 처리 미들웨어를 안 연결해도 익스프레스가 에러를 알아서 처리해주긴 한다.
  • 특별한 경우가 아니면 가장 아래에 위치하도록 하자!!

next 활용법

next

  • next를 호출해야 다음 코드로 넘어간다
  • next를 주석 처리하면 응답이 전송되지 않는다
  • 다음 미들웨어(라우터 미들웨어)로 넘어가지 않기 때문이다
  • next에 인수로 값을 넣으면 에러 핸들러로 넘어간다(‘route’인 경우 다음 라우터로)

미들웨어 간 데이터 전달

미들웨어간 데이터 전달하기

  • req나 res 객체 안에 값을 넣어 데이터 전달 가능하다
  • app.set과의 차이점: app.set은 서버 내내 유지, req, res는 요청 하나 동안만 유지한다
    • express-session을 사용하면 session에도 넣을 수 있지만, 다음 요청에도 그 값이 남아있는 단점이 있다
  • req.body나 req.cookies 같은 미들웨어의 데이터와 겹치지 않게 조심하자

미들웨어 확장법

동일한 두 코드
로직을 추가해서 사용할 수 있다.

  • 미들웨어(req, res, next)를 쓰면 미들웨어를 확장할 수 있다.
  • 로직이 들어갈 수 있기 때문에 확장에 용이하다(로그인 검사하는 로직을 쓸 때, 유용)
728x90