pages
Version:
AngularJS / Node.js sidekick.
69 lines (42 loc) • 1.81 kB
text/coffeescript
This is a standard application to use for all Pages projects. It understands the concept of _Server Modules_, and requires _Node.js Modules_ accordingly.
express = require 'express'
uuid = require 'node-uuid'
connect = require 'connect'
ejs = require 'ejs'
log = require './lib/log'
serverModules = require './lib/server_modules.litcoffee'
app = express()
app.use express.bodyParser()
run = (cb) ->
configureServer () -> serverModules.serverStarting app, () -> listen () ->
serverModules.serverStarted()
cb()
configureServer = (cb) ->
app.configure () ->
app.engine 'html', ejs.renderFile
app.set 'view options', layout: false
app.use express.cookieParser()
Session secrets are generated as time-based UUIDs.
secret = uuid.v1()
app.use express.session(
secret: secret
)
app.use express.methodOverride()
app.use express.favicon()
app.use connect.logger stream: log.stream
allowCrossDomain = (req, res, next) ->
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'
res.header 'Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With'
Intercept OPTIONS method.
if 'OPTIONS' is req.method then res.send 200 else next()
app.use allowCrossDomain
app.use app.router
app.use express.static "#{process.cwd()}/_app"
app.get '/', (req, res) -> res.render "#{process.cwd()}/_app/index.html"
cb app
listen = (cb) -> app.listen process.env.PORT, () -> cb()
## Public API ##
publicFns =
run: run
module.exports = publicFns