본문 바로가기
All Side/Runtime > NodeJS

[Node.js] 미들웨어 정의, 유형

by developerBeluga 2022. 2. 12.
728x90
반응형

 

 

미들웨어란

클라이언트에게 요청이 오면 응답하기 위해 목적에 맞게 처리해주는 함수이다.

 

예를 들어, route를 생성할 때마다 공통된 처리를 하고 싶을 때 어떻게 해야할까?

요청이 들어올 때마다 이 요청이 어떤 유저의 요청인지 인증검사를 해야할 수 있다.

이럴때 코드를 작성하게 되면 route를 하나 만들때 마다 매번 유저 인증을 확인하는 코드를 작성해야한다..

이러한 반복 작업 혹은 정의한 route에 오기 전에 중간에서 미리 처리해야할 것들을 정의하는 것이 미들웨어다.

 

express.static, express.json, express.urlencoded 같은 함수도 미들웨어를 만들어주는 함수이다.

  • express.static(path) : path에 입력한 경로에 있는 파일을 그대로 서빙해주는 기능을 수행하는 미들웨어 
  • express.json : HTTP Request에서 Body에 담긴 JSON 형식의 데이터를 express 서버에서 사용할 수 있게 해주는 미들웨어
  • express.urlencoded : HTTP Request에서 Body에 담긴 Form 형식의 데이터를 express 서버에서 사용할 수 있게 해주는 미들웨어

 

어플리케이션 레벌 미들웨어

var app = express();

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

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

app.use() 및 app.METHOD() 함수를 이용해 app 오브젝트의 인스턴스에 바인드 시킨다.

미들웨어를 어플리케이션 영역에서 지정한 path대로 처리 가능하게 한다.

 

 

 

라우터 레벨 미들웨어

const router = express.Router();

router.get("/", (req, res) => {
  res.send("Hi!");
});

express.Router() 인스턴스에 바인드된다는 점을 제외하면 위에서 본 애플리케이션 레벨 미들웨어와 동일하다.

 

// goods.js
var express = require('express');
var router = express.Router();
 
router.get('/list', function(req, res, next) {
  res.send('Router 상품 목록 페이지')
});

router.get('/detail', function(req, res, next) {
  res.send('Router 상품 상세 페이지')
});
  
module.exports = router;


// index.js
const goodsRouter = require('./routes/goods');

app.use('/goods',goodsRouter);

이런 방식으로 비슷한 router들의 집합으로 모아 모듈화된 어플리케이션을 만들 수 있다.

 

 

오류 처리 미들웨어

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

오류처리 미들웨어는 항상 4개의 인수가 필요하다.

next 오브젝트를 사용할 필요는 없지만, 시그니처를 유지하기 위해 지정해줘야 실패하지 않는다.

 

 

 

 

 

728x90
반응형

댓글