gist

2012年2月26日日曜日

[Node.js]ExpressのテンプレートにCoffeeKupを使ってみた。

前日のエントリーでは、CoffeeScript, Express, Jade, Mochaでコーディングしました。テンプレートにはJadeを使用していました。折角なので、CoffeeKup で書きなおしてみます。コーヒーで統一です。

CoffeeScriptで統一できる以外、特にアーキテクチャが良いわけでは有りません。急速成長中のNode.jsの世界では、まだまだ鉄板と言えるようなフレームワークがないのが現状だと感じています。

CoffeeKupインストール

$ npm install coffeekup

views/layout.coffee

doctype 5
html ->
  head ->
    meta charset: 'utf-8'
    title "#{@title}"
    link rel: 'stylesheet', href: 'http://twitter.github.com/bootstrap/1.4.0/bootstrap.min.css'
    style ''' 
      #content {padding-top: 60px}
    '''
  body ->
    div '.topbar-wrapper', ->
      div '.topbar', ->
        div '.topbar-inner', ->
          div '.container', ->
            h3 -> a href: '/', -> @title
            ul '.nav', ->
              li -> a href: 'post/new', -> 'あたらしい投稿'
    div '#content.container', ->
      @body

views/index.coffee

for post in @posts
  h1 -> a href:"/post/#{post.id}", -> post.title
  p '.content', -> post.body

app.coffeeにテンプレートを登録。

app.coffee

express = require("express")
routes = require("./routes")
mongoose = require('mongoose')

app = module.exports = express.createServer()
app.configure ->
  # .coffee拡張地をCoffeeKupとして登録
  app.register ".coffee", require 'coffeekup'
  app.set "views", __dirname + "/views"
  # coffeeをビューエンジンに指定
  app.set "view engine", "coffee"
  app.use express.bodyParser()
  app.use express.methodOverride()
  app.use app.router
  app.use express.static(__dirname + "/public")

app.configure "development", ->
  mongoose.connect 'mongodb://localhost/coffeepress-dev'
  app.use express.errorHandler(
    dumpExceptions: true
    showStack: true
  )

app.configure "production", ->
  mongoose.connect 'mongodb://localhost/coffeepress-prod'
  app.use express.errorHandler()

app.get "/", routes.index
app.get "/post/new", routes.newPost
app.post "/post/new", routes.addPost
app.get "/post/:id", routes.viewPost
app.listen 3000
console.log "Express server listening on port %d in %s mode", app.address().port, app.settings.env

0 件のコメント: