coffee-shop
Version:
Coffee Web Framework.
61 lines (55 loc) • 1.96 kB
text/coffeescript
process.env.ROOT = __dirname + '/static/'
process.env.development = true
process.env.PORT = 3001
sugar = require 'sugar'
fs = require 'fs'
express = require 'express'
app = express()
# CoffeeTemplates.__express
app.response._render = app.response.render
app.response.render = (name, options, cb) ->
options = options or {}
options.view = name
options.layout =
if options.layout
'shared/layouts/'+options.layout
else
'shared/layouts/application'
app_helper = require process.env.ROOT+'app/helpers/application'
for k of app_helper
((f)->
options[k] = ->
cb = arguments[arguments.length-1]
cb f.apply null, arguments
)(app_helper[k])
if name.indexOf('server/') is 0
name = 'app/views/templates'
else # shared
name = 'public/assets/templates'
@_render name, options, cb
app.set 'view engine', 'js'
app.set 'views', process.env.ROOT
app.engine 'js', (path, options, cb) ->
render = (str) ->
eval 'templates='+str
cb null, templates options.view, options
fs.readFile path, 'utf8', (err, templates) ->
if path.indexOf('static/app/views/templates.js') isnt -1 # server-only template requested
# splice-in shared templates; this extra cpu avoids double-tree stored on disk
fs.readFile process.env.ROOT+'public/assets/templates.js', 'utf8', (err, shared_templates) ->
templates = templates.split("\n")
templates.splice -2, 0, shared_templates.split("\n").slice(2,-2).join("\n")
render templates.join("\n")
else
render templates
# http request logger
app.use (req, res, done) ->
console.log "#{req.method} \"#{req.url}\" for #{req.ip} at #{Date.create().iso()}"
done()
# static file server
app.use express.static process.env.ROOT + 'public/'
# controllers
require(process.env.ROOT + 'app/controllers/application') app
# start server
app.listen process.env.PORT
console.log "listening on http://localhost:#{process.env.PORT}/"