본문 바로가기

Node.js

7. middleware

💨 Middleware 란?

 

미들웨어는 Express.js 동작의 핵심이다.

HTTP 요청과 응답 사이에서 단계별 동작을 수행해주는 함수이기도 하다.

 

💨 middleware 작성법 

 

req, res, next 를 가진 함수를 작성하면 해당 함수는 미들웨어로 동작할 수 있다. 

 

req : HTTP 요청을 처리하는 객체

res : HTTP 응답을 처리하는 객체

next : 다음 미들웨어를 실행하는 함수

 

const logger = (req, res, next) => {
  console.log(`Request ${req.path}`);
  next();
}
//req.path 와 같은 요청을 처리할 수 있는 기능을 제공

const auth = (req, res, next) => {
  if (!isAdmin(req)) {
    res.send("Not Authorized");
    return;
  }
  next();
}

 

✅ next 함수를 통해 다음 미들웨어를 호출해야한다. next() 함수가 호출되지 않으면, 미들웨어 사이클이 멈추기 때문이다.

 

1. 어플리케이션 미들웨어

app.use((req, res, next) => {
  console.log(`Request ${req.path}`);   // 1번
  next();
})

app.use(auth); // 2번

//3번
app.get('/', (req, res, next) => { // '/' -> http 요청이 들어오면 미들 웨어는 위에서부터 순서대로 실행된다.
  res.send('Hello Express');
});

 

use 나 http method 함수를 사용하여 미들웨어를 연결할 수 있다. 

 

미들웨어를 모든 요청에 공통적으로 적용하기 위한 방법이다.

 

2. 라우터 미들웨어 

 

router.use(auth);  //3번

router.get('/', (req, res, next) => {
  res.send('Hello Router');
}); //4번

app.use((req, res, next) => {
  console.log(`Request ${req.path}`);
  next(); //1번
});

app.use('/admin', router); // 2번

// 2번의 라우터가 admin 이라는 패스의 라우터에 연결이 되어있기 때문에, 
// 요청이 들어왔을 때  1번이 먼저 실행이되고 그 후 순차적으로 3,4번이 실행된다.

 

3. 미들웨어 서브스텍 

 

app.use(middleware1, middleware2, ...);

app.use('/admin', auth, adminRouter);

app.get('/', logger, (req, res, next) => {
  res.send('Hello Express');
})

 

use나 http method 함수에 여러 개의 미들웨어를 동시에 적용할 수 있음. 

주로 한 개의 경로에 특정해서 미들웨어를 적용하기 위해 사용한다.

 

4. 함수형 미들웨어 

 

const auth = (memberType) => {   // memberType이라는 인자를 넘겨받고
  return (req, res, next) => {   // return 값으로 아래와 같은 미들웨어 함수를 리턴해준다.
    if (!checkMember(req, memberType)) {
      next(new Error(`member not ${memberType}`));
      return;
    }
    next();
  }
}

app.use('/admin', auth('admin'), adminRouter);

app.use('/users', auth('member'), useRouter);

 

5. 오류처리 미들웨어 

 

app.use((req, res, next) => {
  if (!isAdmin(req)) {
    next(new Error('Not Authorized'));  // next에 인자를 넘기는 경우 중간 미들웨어들은 뛰어넘고 
                                        // 오류처리 미들웨어가 실행된다.
    return;
  }
  next();
});

app.get('/', (req, res, next) => {
  res.send('Hello Express');
});

app.use(err, res, req, next) => {
  res.send('Error Occurred');
};

 

 

* 쿼리 파라미터 : URL의 쿼리 파라미터란 아래 ? 뒤에 지정하는 파라미터를 뜻합니다. 여러 개를 연결할 때는 & 를 씁니다. 쿼리 스트링(query string)이라고도 합니다.

 

 

'Node.js' 카테고리의 다른 글

9. 용어 정리  (0) 2022.02.27
8. REST API  (0) 2022.02.19
6. Express.js  (0) 2022.02.18
5. 웹 프레임워크  (0) 2022.02.18
4. Node.js 의 모듈  (0) 2022.02.18