Skip to content

Instantly share code, notes, and snippets.

@vmakhaev
Created July 2, 2014 11:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vmakhaev/a9dce3dec7ecd7fe9a67 to your computer and use it in GitHub Desktop.
Save vmakhaev/a9dce3dec7ecd7fe9a67 to your computer and use it in GitHub Desktop.
coffeeify = require 'coffeeify'
express = require 'express'
session = require 'express-session'
serveStatic = require 'serve-static'
compression = require 'compression'
bodyParser = require 'body-parser'
cookieParser = require 'cookie-parser'
RedisStore = require('connect-redis')(session)
derby = require 'derby'
racerHighWay = require 'racer-highway'
liveDbMongo = require 'livedb-mongo'
redis = require 'redis'
app = require '../app'
errorMiddleware = require '../error/middleware'
derbyLogin = require 'derby-login'
authOptions = require '../config/auth'
hooks = require './hooks'
derby.use require 'racer-bundle'
derby.use require('racer-schema'), require '../validation'
redisClient = redis.createClient process.env.REDIS_PORT, process.env.REDIS_HOST
redisClient.auth process.env.REDIS_PASSWORD
redisClient.select process.env.REDIS_DATABASE
sessionStore = new RedisStore client: redisClient
sessionMiddleware = session
secret: process.env.SESSION_SECRET
store: sessionStore
store = derby.createStore
db: liveDbMongo process.env.MONGO_URL + '?auto_reconnect', safe: true
redis: redisClient
hooks store
handlers = racerHighWay store, session: sessionMiddleware
store.on 'bundle', (browserify) ->
browserify.transform global: true, coffeeify
pack = browserify.pack
browserify.pack = (options) ->
detectTransform = options.globalTransform.shift()
options.globalTransform.push detectTransform
pack.apply this, arguments
publicDir = __dirname + '/../public'
createUserId = (err, req, res, next) ->
model = req.getModel()
userId = req.session.userId
if !userId
userId = req.session.userId = model.id()
model.set '_session.userId', userId
next()
expressApp = module.exports = express()
.use handlers.middleware
.use compression()
.use serveStatic publicDir
.use cookieParser process.env.SESSION_SECRET
.use sessionMiddleware
.use store.modelMiddleware()
.use createUserId
.use bodyParser()
.use derbyLogin.middleware authOptions
.use app.router()
derbyLogin.routes expressApp, store
expressApp.all '*', (req, res, next) ->
next '403: ' + req.url
expressApp.use errorMiddleware
app.writeScripts store, publicDir, {extensions: ['.coffee']}, ->
expressApp._upgrade = handlers.upgrade
@vmakhaev
Copy link
Author

vmakhaev commented Jul 2, 2014

require 'coffeeify'
http = require 'http'
derby = require 'derby'

try
  for key, value of require './config'
    process.env[key] = value

port = process.env.PORT

listenCallback = (err) ->
  console.log '%d listening. Go to: http://localhost:%d/', process.pid, port

createServer = ->
  expressApp = require './server/index'
  server = http.createServer expressApp
  server.on 'upgrade', expressApp._upgrade
  server.listen port, listenCallback

derby.run createServer

process.on 'uncaughtException', (err) ->
  console.log 'Uncaught exception: ' + err.stack

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment