doortts / blog

0 stars 0 forks source link

[node.js] Connect 2.0 소개 #242

Open doortts opened 12 years ago

doortts commented 12 years ago

@doortts (doortts) 님이 작성한 게시글입니다. ---

doortts | 2012-02-28 화요일 오후 2:57 | node.js (OctoberSkyJs) | 원본

우리의 미치광이 개발자 TJ Holowaychuk가 Connect 2.0 을 공개하였습니다. Express의 근간이 되는 모듈이죠. 곧 Express 3.0이 나올예정인데요, Express 사용자라면 한번쯤 봐두면 도움이 될 겁니다. : )

Connect 2.0

새로운 코어 미들웨어와 여러가지 개선사항, 그리고 새로운 문서들(docs)과 함께 하는 Connect 2.0입니다.

var  app = connect()
   .use(connect.logger('dev'))
   .use(connect.static('public'))
   .use(function(req, res){
     res.end('hello world\n');
   })

  app.listen(3000);

HTTP and HTTPS

기존  connect.Server는 노드의 코어인  net.Server를 상속했는데요, HTTP와 HTTPS를 모두 제공하기가 어려웠습니다. 이전에는 connect.createServer()였습니다만 이제 새로운 connect() 는 간단한 자바스크립트 함수입니다. 따라서 이젠 아래와 같은 식으로  app.listen()호출을 생략하고  app을 노드의 net.Server로 간단히 넘길 수 있습니다. 

var  connect = require('connect')
   , http = require('http')
   , https = require('https');

 var  app = connect()
   .use(connect.logger('dev'))
   .use(connect.static('public'))
   .use(function(req, res){
     res.end('hello world\n');
   })

 http.createServer(app).listen(80);
 https.createServer(tlsOptions, app).listen(443);

Body parsers

 bodyParser()미들웨어는 이제 단순히 json()multipart(), 그리고 urlencoded() 를 추가하는데 쓰는 축약표현에 불과합니다. 해당 함수들은 파싱된 값들을  req.body 에 담습니다. 그리고 multipart()는 업로드를 위해 req.body``와 ``req.files를 제공합니다.

==  bodyParser 소스코드 == exports = module.exports = function bodyParser(options){ var _urlencoded = urlencoded(options) , _multipart = multipart(options) , _json = json(options); return function bodyParser(req, res, next) { _json(req, res, function(err){ if (err) return next(err); _urlencoded(req, res, function(err){ if (err) return next(err); _multipart(req, res, next); }); }); } }; 

Core compression

Node 0.6.0에서 빠른 네이티브 압축능력들을 제공하는 관계로, 이제 우리도 gzip과 deflate를 지원하는 compress()  미들웨어를 갖게 되었습니다.

Cookie parser 

cookieParser() 미들웨어는 이제 싸인된 쿠키들(signed cookies)과 secret을 받아들입니다. 해당 기능은 session({ secret: string })을 session()미들웨어로 넘길 필요성을 교체하였습니다. 싸인된 쿠키들은 req.signedCookies를 통해서, 그리고 싸인되지 않은 쿠키들은 req.cookies를 통해 사용가능합니다.  

Error delegation

이전의 몇몇 코어 미들웨어는 에러 상황들에 직접 응답해야 했었습니다.. 해당 사항들은 단순히 next(err) 를 함게 쓰는 걸로 변경되었습니다. 이렇게 변경함으로써 에러 핸들링 미들웨어를 추가함으로써 커스터마이즈된 행동들을 지정하는 것이 가능해졌습니다.

app.use(function(err, req, res, next){
   if  (4  == err.status /  100) {
     // render a client-error page
   } else  {
     // render a server-error page
   }
 });

Session

앞서 언급했던 것처럼 session()은 더이상 secret을 필요로 하지 않습니다. .maxAge 쿠키는 null이 기본값이었는데요, 브라우저 세션쿠키가 된다는 뜻이고요, 방문자가 브라우저를 닫으면 만료됩니다.

Third-party middleware

서드파티 미들웨어는 완벽하게 동작 합니다만 이번 Connect 릴리즈는  Express 2.x 와 호환되지 않습니다. 곧   Express 3.0 이 나올예정입니다.

Changelog

공개된 API에 영향을 주지않는 것들을 포함해서 다음과 같은 중요한 변경이 이루어졌습니다. 마찬가지로 Mocha를 사용해서 테스트를 다시 다 작성했습니다.