1 | _ = require 'lodash'
|
2 | express = require 'express'
|
3 | morgan = require 'morgan'
|
4 | compression = require 'compression'
|
5 | bodyParser = require 'body-parser'
|
6 | OctobluRaven = require 'octoblu-raven'
|
7 | enableDestroy = require 'server-destroy'
|
8 | sendError = require 'express-send-error'
|
9 | expressVersion = require 'express-package-version'
|
10 | meshbluAuthDevice = require 'express-meshblu-auth-device'
|
11 | meshbluHealthcheck = require 'express-meshblu-healthcheck'
|
12 | Router = require './router'
|
13 |
|
14 | class 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 |
|
58 | module.exports = Server
|