본문 바로가기
NODE.JS

Node.js - Middleware 개념

by devLog by Ronnie's 2021. 7. 30.

Node.js - Middleware 개념.

 

node에서 미들웨어 함수란?

req(요청) 객체, res(응답) 객체, 그리고 어플리케이션 요청-응답 사이클 도중 그 다음의 미들웨어 함수에 대한 엑세스 권한을 갖는 함수라고 정의를 하고 있다.

 

간단히 말하면 클라이언트가 보내온 요청에 응답하는 함수인데 이름 그대로 중간(미들)에 위치하여 목적에 맞게 처리하는 거쳐가는 함수들이라고 생각하면 이해하기 편하다.

 

미들웨어 함수는 next함수를 이용해서 다음 미들웨어로 현재의 요청을 넘길 수 있으므로 순서가 중요하다.

이때 next함수를 이용해서 다음 미들웨어를 호출한다는 것은 아래에 간단한 예제로 확인이 가능하다.

var express = require('express');
var app = express();

var logger = function (req, res, next) {
  console.log('log..');
  next();
};

app.use(logger);

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

루트경로 3000포트로 요청을 보냈을때  logger함수를 거쳐 next()함수가 다음 미들웨어를 호출하여 Hello Word!가 찍히게 된다.

 

현재의 요청을 넘길수 있다는 말은 요청(req), 응답(res) 객체를 변경 가능하다는 말과 같다.

이 경우도 다음 예제를 통해 확인이 가능하다.

var express = require('express');
var app = express();

var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

app.use(requestTime);

app.get('/', function (req, res) {
  var responseText = 'Hello World!';
  responseText += 'Requested at: ' + req.requestTime;
  res.send(responseText);
});

app.listen(3000);

requestTime 미들웨어에서 req 객체 안에 requestTime이라는 프로퍼티를 만들고 전달을 한다. 이 값을 다음 미들웨어에서 값을 가져다 사용할 수 있다. 이 말은 즉 넘긴 요청을 사용 가능하다는 것이다.

 

그리고 마지막에 res.send();를 함으로써 요청-응답 주기를 종료한다. 

 

 

 

 

댓글