2012년 8월 8일 수요일

express 2.0 에서 3.0으로 바꿀때 주의할 점.

하드 파티션이 날아가서 새로 셋업하고
작업하던 소스를 받아와서 아무생각 없이 npm install 했더니
express 3.0으로 되어있더라.

기존의 소스는

express = require 'express'
gzippo = require 'gzippo'
fs = require 'fs'
http = require 'http'
app = express.createServer()
path = require 'path'

tmpl =
  compile: (source, options)->
    (locals)->
      # 여기에 템플릿 뽁찡
      source
 
port = process.env.VMC_APP_PORT || 3000
app.configure ->
  app.set 'views', "#{__dirname}/../public"
  app.use app.router
  app.set 'view options', layout: false
  app.set 'view engine', 'html'
  app.register '.html', tmpl
  app.use gzippo.staticGzip "#{__dirname}/../public"

app.get '/', (req,res) ->
  res.render "./html/index.html"

app.listen port, ->
  console.log "Listening on #{port}"

이런 식으로 썼다면



express = require 'express'
fs = require 'fs'
http = require 'http'
app = express()

tmpl = (path, options, fn) ->
  fs.readFile path, 'utf8', (err,str) ->
    # 오류처리하고 템플릿 뽁찡
    if err then fn err else fn null, str.toString()
 
app.configure ->
  app.set 'port', process.env.VMC_APP_PORT || 3000
  app.set 'views', "#{__dirname}/../public"
  app.use app.router
  app.set 'view options', layout: false
  app.set 'view engine', 'html'
  app.engine '.html', tmpl
  app.use require('connect').compress()
  app.use express.static("#{__dirname}/../public")

app.get '/', (req,res) ->
  res.render "./html/index.html"

http.createServer(app).listen app.get('port'), ->
  console.log "Listening on #{app.get('port')}"



이런 패턴으로 바뀌었다.
정리해보면

  1. express.createServer() 가 deprecated 되었다. 그냥 express() 사용
  2. 커스텀 템플릿 엔진을 사용하기 위해 register 대신 engine 을 사용
  3. 압축 전송을 위해 gzippo 를 썼는데 connect 버전업과 함께 그냥 connect.compress() 사용
  4. 템플릿 인자가 바뀜. 전엔 해당 파일의 문자값이 넘어왔는데 지금은 path를 반환.
  5. app.get 으로 key, value 형태로 값을 읽어올 수 있음.
자세한 내용은 아래 링크를 참조