[학습목표]
1. Express가 무엇인지 알 수 있다.
2. 요청과 응답에 대한 원리를 이해할 수 있다.
Express
자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크
Express-application
기본적으로 일련의 미들웨어 함수 호출이다.
요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수에 대한 액세스 권한을 갖는 함수이다.
그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시된다.
현재의 미들웨어 함수가 요청-응답 주기를 종료하지 않는 경우에는 next()를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야한다. 그렇지 않으면 해당 요청은 정지된 채로 방치된다.
예를 들어서 요청-응답 도중에 시간을 콘솔 창에 남기고 싶다면 미들웨어 함수를 중간에 넣어서 표시를 한 뒤, 계속해서 다음 미들웨어들을 처리할 수 있도록 하는 것이다. 다음 미들웨어 함수에 대한 엑세스는 next 함수를 이용해서 다음 미들웨어로 현재 요청을 넘길 수 있다.
next라는 말에서 알 수 있듯이 next를 통해 미들웨어는 순차적으로 처리된다. (따라서 순서가 중요하다)
※ 호출에 대해서
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);
위의 코드는 클라이언트가 루트 경로(ex. http:/localhost:3000/)로 요청을 보냈을 때, myLogger를 먼저 거치고 myLogger는 다음 미들웨어 호출(next())함수를 지정하여 res.send("Hello World"); 코드가 담긴 미들웨어로 넘어가게 된다는 의미이다.
※ res, req 객체 변경 가능
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 methods)한다는 의미는 앞서 배웠던 response의 method를 이용하여 클라이언트에게 응답을 전송한다는 의미이다. (응답 전송시 종료)
위의 코드는 res.send(responseText);가 주기를 종료한다는 의미이다.
미들웨어 함수 호출의 요소
미들웨어 예시
app.use 안에 있는 모든 함수들은 모두 미들웨어이며 요청이 올때마다 이 미들웨어를 거치며 클라이언트에게 응답하게 된다.
cf) 이 미들웨어들은 페이지를 렌더링할 때 사용자 인증을 앞서 거친 후에 렌더링하고 싶을 때, 사용자 인증 미들웨어를 작성하고 앞에 삽입하게 되면 편리하다.
Express-application의 유형
※ 자세한 설명은 링크참조
[출처]