UNPKG

2.04 kBtext/coffeescriptView Raw
1_ = require 'lodash'
2express = require 'express'
3morgan = require 'morgan'
4compression = require 'compression'
5bodyParser = require 'body-parser'
6OctobluRaven = require 'octoblu-raven'
7enableDestroy = require 'server-destroy'
8sendError = require 'express-send-error'
9expressVersion = require 'express-package-version'
10meshbluAuthDevice = require 'express-meshblu-auth-device'
11meshbluHealthcheck = require 'express-meshblu-healthcheck'
12Router = require './router'
13
14class Server
15 constructor: ({@port, @meshbluConfig, @disableLogging, @client, @deployDelay, @redisQueue, @octobluRaven}) ->
16 throw new Error('client is required') unless @client?
17 throw new Error('deployDelay is required') unless @deployDelay?
18 throw new Error('redisQueue is required') unless @redisQueue?
19 @octobluRaven ?= new OctobluRaven
20
21 address: =>
22 @server.address()
23
24 run: (callback) =>
25 app = express()
26 app.use @octobluRaven.express().handleErrors()
27 app.use sendError()
28 app.use meshbluHealthcheck()
29 app.use compression()
30 app.use expressVersion({format: '{"version": "%s"}'})
31 skip = (request, response) =>
32 return response.statusCode < 400
33 app.use morgan 'dev', { immediate: false, skip }
34 app.use meshbluAuthDevice(@meshbluConfig)
35 app.use bodyParser.urlencoded limit: '50mb', extended : true
36 app.use bodyParser.json limit : '50mb'
37 app.use (request, response, next) =>
38 response.sendError = (error) =>
39 console.error error.stack
40 code = 500
41 code = error.code if _.isNumber error.code
42 return response.sendStatus code unless error.message?
43 return response.status(code).send error.message
44 next()
45
46 router = new Router {@client, @deployDelay, @redisQueue}
47 router.route app
48
49 @server = app.listen @port, callback
50 enableDestroy @server
51
52 stop: (callback) =>
53 @server.close callback
54
55 destroy: =>
56 @server.destroy()
57
58module.exports = Server