-
Express의 미들웨어들Legacy/Node.js 2017. 1. 14. 01:49728x90
참고 - [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'); });
위와 같이 고정된 url에 대해 처리해주면 되지만, RESTful API를 요청할 경우 글 번호 같은것을 url로 전송하면 받아오고 싶은경우가 있다. 스프링 프레임워크에 익숙한 사람이라면 @PathVariable을 생각하면 되겠다.// 모듈을 추출합니다. 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'); });
URL 매핑 부분에 ":변수명"을 입력한 후 "request.params.변수명"으로 받아오면 된다.다만 동적으로 데이터를 받아오게 되기 때문에 입력값에 대한 검증 및 보안 코딩이 필요하다.추가로 모든 라우팅 페이지에 대한 전체선택자를 사용할 수 있다. 경로를 "*"로 설정해주면 된다.// 모듈을 추출합니다. 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. 그 외 다른 모듈들
'Legacy > Node.js' 카테고리의 다른 글
express ejs에서 PJAX 사용시 header 및 footer 조건부 include하기 (0) 2017.01.14