1. Express란?
Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크
웹 및 모바일 어플리케이션을 위한 다양한 기능을 제공하며, 자유롭게 활용할 수 있는 수많은 HTTP Utility Method 및 미들웨어를 통해 쉽고 빠르게 강력한 API를 작성할 수 있다.
[ MiddleWare란? ]
시스템 소프트웨어와 응용 소프트웨어 사이 또는 두 가지 다른 종류의 응용 프로그램 사이에서 조정 및 중개 역할을 하는 프로그램
2. Express 정적 파일
1) 정적 디렉토리를 여러개 선언도 가능하다.
app.use(express.static('public'));
app.use(express.static('private'));
Express는 express.static 미들웨어 함수를 이용해 정적 디렉토리를 설정한 순서대로 파일을 검색한다. 즉, public 폴더를 먼저 검색하고 그 후에 private 폴더를 탐색하기 시작한다.
따라서, 여러개의 정적 폴더를 지정하고 사용하기 위해서는 해당 정적 디렉토리에 대한 '마운트 경로'를 지정해서 사용한다.
app.use('/static', express.static('public')); => /static으로 시작하는 경로는 public 정적 폴더에 접근하여 탐색한다.
http://localhost:3000/static/images/kitten.jpg
2) 디렉토리의 절대 경로를 사용하자.
위와 같이 폴더명, 마운트 경로 등은 현재 프로세스가 실행되는 디렉토리에 대해 상대적인 주소이다. 따라서, 해당 Express 앱이 다른 디렉토리에서 사용할 경우 문제가 발생할 수 있다.
이럴 경우 절대경로를 이용하여 안전성을 높이자.
app.use('/static', express.static(__dirname+'/public'));
3. Express Router
1) express.Router();
express.Router를 이용하면 모듈식 마운팅 가능한 핸들러를 작성할 수 있다.
예제) 라우터를 모듈로 작성하고, 라우터 모듈에서 미들웨어 함수를 로드하고, 기본 앱에서 라우터 모듈을 마운트하는 과정
[ sample.js ]
var express = require('express');
var router = express.Router();
// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// define the home page route
router.get('/', function(req, res) {
res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;[ server.js ( 메인앱 서버 ) ]
var sample= require('./sample');
...
app.use('/sample', sample);앱은 /sample에 대한 요청이 들어오게 되면 sample 모듈로 이를 넘기고 sample 모듈에서는 '/' , '/about'에 대한 요청을 처리할 수 있다.
4. 미들웨어 함수
기본적으로 express.js에서 작성하는 대부분 함수의 형태가 미들웨어 함수이다.
즉, 미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트(res), 어플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수에 대한 액세스 권한을 가지는 (next) 로 구성되어 있다.
미들웨어 함수는 다음과 같은 Task를 수행할 수 있다.
- 모든 코드를 실행
- 요청 및 응답 오브젝트에 대한 변경을 실행
- 요청-응답 주기를 종료
- 스택 내의 그 다음 미들웨어를 호출
예시) 미들웨어 함수 호출의 요소
![]() | 미들웨어 함수가 적용되는 HTTP 메소드. 미들웨어 함수가 적용되는 경로(라우트). 미들웨어 함수. 미들웨어 함수에 대한 콜백 인수(일반적으로 "next"라 불림). 미들웨어 함수에 대한 HTTP 응답 인수(일반적으로 "res"라 불림). 미들웨어 함수에 대한 HTTP 요청 인수(일반적으로 "req"라 불림). |
5. Express + Template Engine
Express가 Template를 렌더링하기 위해서는 View Engine 설정이 필요하다.
app.set('views', './views');
app.set('view engine', 'jade');
ex) index.jade 파일의 경로가 /views/index.jade일 경우 다음과 같은 형태로 렌더링 가능
app.get('/', function (req, res) {
res.render('index', { title: 'Hey', message: 'Hello there!'});
});