새끼 개발자의 Life is egg

[Node.js] 미들웨어와 공통 로직 본문

개발's egg/Javascript

[Node.js] 미들웨어와 공통 로직

현z 2023. 10. 6. 16:33

세션이 없는 상태에서 데이터 요청시 권한이 없다는 응답을 주려고

app.get, app.post 마다 

res.status(401).json({message: '권한이 없음'});

이걸 쓰는건 좀 아니잖아...


 

미들웨어는 express에서 요청과 응답을 처리하는 기능이다.

애플리케이션과 라우터 수준에서 미들웨어가 처리하는 요청은 use, get, post, put 이 있고,

여기에 req, res, next 3개의 인수를 넣는다.

req는 요청객체, res는 응답객체, next는 다음 미들웨어로 넘어갈때 사용하는 함수이다.

 

app.use((req, res, next) => {
  
});

모든 요청이 이 미들웨어를 먼저 거치게 된다.

공통 로직이 필요하면 여기에 작업을 해주고 next() 를 사용한다.

 

app.get('/', (req, res, next) => {

});

'/' 으로 접근하는 get 요청에 대한 처리를 한다.

 


 

그런데 미들웨어에 err 까지 4개의 인수를 넣는다면 어떨까!

e!

r!

r!

 

app.use((err, req, res, next) => {
  res.status(err.status || 500).json({message: err.message})
});

맨 앞에 err 인수가 추가되었다.

 

이렇게 만들면 오류 처리 미들웨어가 된다.

모든 요청에서 공통으로 처리할 오류를 여기에 작성하면 된다.

 

오류 처리 미들웨어를 작성할 때 주의할 사항은

모든 use()와 라우트 코드 다음에 위치해야 한다는 점이다.

그냥 맨 아래에 넣어주면 된다.

 


 

app.get('/gg', (req, res, next) => {
  if (세션이 있으면) {
    res.status(200);
    next();
  } else {
    next(new Error('그런거 없다.'));
  }
}, (req, res, next) => {
  res.send('드... 드리겠습니다!');
});

 

res.end(), res.send(), res.json() 를 사용해서 요청에 응답 완료 처리를 해준다.

res.end() 는 요청에 응답을 완료할 때 사용하고

res.send(), res.json()은 데이터를 보낼 때 사용하는데, 내부에 end() 가 들어있어서 자동으로 응답 완료가 된다.

 

다음 미들웨어로 보낼 때는 next() 를 사용하면 되는데,

이 때 next() 안에 인자를 담아주면

만들어두었던 오류 처리 미들웨어로 이동한다.

 

 

Comments