
미들웨어는 운영 체제와 해당 운영 체제에서 실행되는 응용 프로그램 사이에 존재하는 소프트웨어입니다. 기본적으로 숨겨진 변환 계층으로 기능하는 미들웨어는 분산 응용 프로그램의 통신 및 데이터 관리를 가능하게 합니다. 데이터와 데이터베이스가 "파이프" 사이를 쉽게 통과할 수 있도록 두 가지 응용 프로그램을 함께 연결하기 때문에 배관이라고도 합니다. 미들웨어를 사용하면 사용자가 웹 브라우저에서 양식을 제출하거나 웹 서버가 사용자의 프로필을 기반으로 동적 웹 페이지를 반환하도록 요청할 수 있습니다.
Azure에서 설명하는 미들웨어의 개념이 길지만 간단히 설명하면 web 서비스에서 구성되는 다양한 서버를 연결해주는 것을 미들웨어라고 보면 된다. Express에서 사용되는 미들웨어 함수는 req, res로 구성된 요청 및 응답 오브젝트라고 볼 수 있다. 이 미들웨어를 통해서 우리는 Express 내에서 다양한 태스크를 수행할 수 있다.

var express = require('express');
var app = express();
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
여기서 미들웨어 함수란 myLogger 함수로 이 함수를 사용하려면 app.use(myLogger) 로 사용하면 된다. 여기서 앱이 요청을 받을 때마다 앱은 "LOGGED"라는 메시지를 호출한다.
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와 app.get에서 사용되는 req는 다르다. 초반에 요청이 들어왔을 때에는 사용자가 요청한 정보만 있었겠지만 requestTime을 거치면서 현재 시간 정보가 추가 되었고 그 결과 app.get에서 받은 req에는 Date.now() 정보가 들어있는 requestTime이 존재하기 때문이다.