node.js 유용한 모듈 (10) - express
원문 링크 - http://www.catonmat.net/blog/nodejs-modules-express/
본 문서는 저자의 허락을 얻어 해당 포스팅을 번역한 것입니다.
9회 연재 - redis (redis 클라이언트 라이브러리)
오늘 소개할 모듈은 express다. 이것은 connect 모듈 기반 위에서 작성된 서버 사이드 웹 개발 프레임워크로 굉장히 작고 빠르다. express는 TJ Holowaychuk에 의해 작성됐다 TJ는 지금까지 85개의 node.js 모듈을 작성했고, 그가 작성한 많은 모듈들이 이 연재에서 다뤄질 것이다.
다음을 살펴보자.
var express = require('express');
var app = express.createServer();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
위 코드는 3000번 포트를 수신 대기하는 웹 서버를 생성하고, /
경로로 http 요청이 왔을 때 Hello World
문자열을 http 응답으로 처리하는 예제이다.
express는 매우 강력한 라우팅 시스템을 가지고 있다. 다음을 보자.
app.get('/user/:id', function(req, res){
res.send('user ' + req.params.id);
});
위 코드는 /user/foo
같은 형식의 경로로 요청이 들어왔을 때 실행되며, 자동으로 req.params.id
에 foo
값이 설정된다. 여러분은 라우팅을 처리하기 위해 정규표현식을 사용할 수도 있다.
POST 요청을 처리하려면, bodyParser
미들웨어를 사용해야 한다. 이를 위해서는 app.use(express.bodyParser())
을 코드에 삽입하면 된다. BodyParser는 기본적으로 application/x-www-form-urlencoded
과 application/json
타입을 가진 HTTP 요청의 body를 파싱해서 req.body에 저장한다. 다음 예를 보면,
app.use(express.bodyParser());
app.get('/', function(req, res){
console.log(req.body.foo);
res.send('ok');
});
위 코드는 body에 포함된 변수를 콘솔에 출력하고, ok
를 응답으로 보낸다
express는 다음과 같이 여러가지 미들웨어들을 사용할 수 있다.
app.use(express.logger(...)); app.use(express.cookieParser(...)); app.use(express.session(...)); app.use(express.static(...)); app.use(express.errorHandler(...));
logger
미들웨어는 수신된 HTTP 요청들의 로그를 다루고, cookieParser
는 쿠키를 처리한다. session
은 HTTP 세션을, static
은 이미지나 css, 스크립트 같은 정적 컨텐츠를 처리하고, errorHandler
는 예외 및 에러를 처리한다.
미들웨어에 대해서 더 많은 것을 공부하려면 express documentation 사이트를 방문해라.
express는 또한 다양한 템플릿 엔진과도 결합할 수 있다. 예를 들어 내가 선호하는 jade 템플릿 엔진(이것 또한 TJ가 개발했다.)도 지원한다. 다음은 express에서 jade 템플릿이 어떻게 렌더링 되는 지를 보여주는 코드이다.
app.get('/', function(req, res){
res.render('index.jade', { title: 'My Site' });
});
템플릿 파일명은 <name>.<engine>
형태를 따른다. 여기서 <engine>
은 해당 템플릿을 처리하기 위해 필요한 모듈명이다. 예를 들어 layout.ejs
템플릿은 express의 view 시스템에게 require('ejs')
을 하라고 전달한다. 이때 로딩중인 템플릿 처리 모듈은 express에서 동작하기 위해 Function
를 리턴하는 exports.compile(str, options)
메서드를 익스포트 해야한다
[역자주 - express 특징 부분은 좀더 정확한 의미를 전달하기 위해서 번역하지 않았다.]
Express features:
- Robust routing.
- Redirection helpers.
- Dynamic view helpers.
- Content negotiation.
- Focus on high performance.
- View rendering and partials support.
- Environment based configuration.
- Session based flash notifications.
- High test coverage.
- Executable for generating applications quickly.
- Application level view options.
As well as:
- Session support.
- Cache API.
- Mime helpers.
- ETag support.
- Persistent flash notifications.
- Cookie support.
- JSON-RPC.
- Logging.
다음 스크린캐스트는 express 개발자 TJ가 설명하는 express 가이드다.
express 소스 트리에 examples 디렉토리에서 더 많은 예제를 살펴볼 수 있다. express는 또한 잘 정리된 documentation을 제공한다.
다음과 같이 npm을 통해 express
를 설치할 수 있다.
npm install express
Express의 GitHub 사이트: https://github.com/visionmedia/express.
Enjoy!
If you love these articles, subscribe to my blog for more, follow me on Twitter to find about my adventures, and watch me produce code on GitHub!