Express의 미들웨어들
참고 - [3판] 모던 웹을 위한 Node.js 프로그래밍 (윤인성)
Express의 미들웨어들 - http://expressjs.com/en/resources/middleware.html
1. router 미들웨어
Express에 내장되어 있는 미들웨어로 별로 미들웨어라는 느낌을 받지 않고 사용할 수 있음.
추가적인 모듈 설치 및 require 없이 app.get(), app.post() 등과 같은 메소드 호출만 필요함.
// 모듈을 추출합니다. var express = require('express'); // 서버를 생성합니다. var app = express(); // 라우터를 설정합니다. app.get('/a', function (request, response) { response.send('<a href="/b">Go to B</a>'); }); app.get('/b', function (request, response) { response.send('<a href="/a">Go to A</a>'); }); // 서버를 실행합니다. app.listen(52273, function () { console.log('Server running at http://127.0.0.1:52273'); });
// 모듈을 추출합니다. var express = require('express'); // 서버를 생성합니다. var app = express(); // 라우터를 설정합니다. app.get('/page/:id', function (request, response) { // 변수를 선언합니다. var name = request.params.id; // 응답합니다. response.send('<h1>' + name + ' Page</h1>'); }); // 서버를 실행합니다. app.listen(52273, function () { console.log('Server running at http://127.0.0.1:52273'); });
// 모듈을 추출합니다. var express = require('express'); // 서버를 생성합니다. var app = express(); // 라우터를 설정합니다. app.get('/index', function (request, response) { response.send('<h1>Index Page</h1>'); }); app.all('*', function (request, response) { response.status(404).send('<h1>ERROR - Page Not Found</h1>'); }); // 서버를 실행합니다. app.listen(52273, function () { console.log('Server running at http://127.0.0.1:52273'); });
router는 모듈화할 수 있다. 다음 두 코드를 보고 동작 방식을 이해해보자.
1) /a/index, /b/index의 생성
// 모듈을 추출합니다. var express = require('express'); // 서버를 생성합니다. var app = express(); // 라우터를 설정합니다. var routerA = express.Router(); var routerB = express.Router(); // 라우터A를 설정합니다. routerA.get('/index', function (request, response) { response.send('<h1>Index Page</h1>'); }); // 라우터B를 설정합니다. routerB.get('/index', function (request, response) { response.send('<h1>Index Page</h1>'); }); // 라우터를 설정합니다. app.use('/a', routerA); app.use('/b', routerB); // 서버를 실행합니다. app.listen(52273, function () { console.log('Server running at http://127.0.0.1:52273'); });
2) /a/index, /b/index의 생성 (+ 경로 별로 파일 나눠주기)
// routerA.js 파일 // 모듈과 변수 선언 var express = require('express'); var router = express.Router(); // 페이지 라우트 router.get('/index', function (request, response) { response.send('<h1>Index Page</h1>'); }); // 외부로 뺍니다. exports.router = router
// index.js 파일 // 모듈을 추출합니다. var express = require('express'); // 서버를 생성합니다. var app = express(); app.use('/a', require("./routerA.js").router); app.use('/b', require("./routerB.js").router); // 서버를 실행합니다. app.listen(52273, function () { console.log('Server running at http://127.0.0.1:52273'); });
routerB.js도 routerA.js와 마찬가지로 추가로 만들어줘야합니다.
2. static 미들웨어
static 미들웨어 역시 router 미들웨어와 마찬가지로 express에 내장된 미들웨어임.
대개는 ./public 폴더에 정적 파일들을 저장하고 static 미들웨어를 이용해 정적파일을 매핑해준다.
./public 폴더를 하나 만들어주고 그곳에 아무 파일이나 하나 만들어주고 해당 파일에 접근해보자.
// 모듈을 추출합니다. var express = require('express'); // 서버를 생성합니다. var app = express(); // 미들웨어를 설정합니다. app.use(express.static(__dirname + '/public')); // 서버를 실행합니다. app.listen(52273, function () { console.log('Server running at http://127.0.0.1:52273'); console.log(__dirname); });
파일이름이 abc.txt라면
브라우저에 "localhost:52273/abc.txt"라고 입력하면된다.
위와 같은 방식으로 RESTful API 서버를 쉽게 만들 수 있다. static요청에 대해서 index.html로 가도록 하면된다.
3. 그 외 다른 모듈들