1 | cors = require 'cors'
|
2 | morgan = require 'morgan'
|
3 | express = require 'express'
|
4 | bodyParser = require 'body-parser'
|
5 | OctobluRaven = require 'octoblu-raven'
|
6 | compression = require 'compression'
|
7 | enableDestroy = require 'server-destroy'
|
8 | expressVersion = require 'express-package-version'
|
9 | sendError = require 'express-send-error'
|
10 | meshbluHealthcheck = require 'express-meshblu-healthcheck'
|
11 | debug = require('debug')('file-downloader-service:server')
|
12 | Router = require './router'
|
13 |
|
14 | class Server
|
15 | constructor: ({@disableLogging, @port, @octobluRaven})->
|
16 | @octobluRaven ?= new OctobluRaven
|
17 |
|
18 | address: =>
|
19 | @server.address()
|
20 |
|
21 | run: (callback) =>
|
22 | app = express()
|
23 | app.use compression()
|
24 | ravenExpress = @octobluRaven.express()
|
25 | app.use ravenExpress.handleErrors()
|
26 | app.use sendError()
|
27 | app.use meshbluHealthcheck()
|
28 | skip = (request, response) =>
|
29 | return response.statusCode < 400
|
30 | app.use morgan 'dev', { immediate: false, skip } unless @disableLogging
|
31 | app.use expressVersion({format: '{"version": "%s"}'})
|
32 | app.use cors()
|
33 | app.use bodyParser.urlencoded limit: '1mb', extended : true
|
34 | app.use bodyParser.json limit : '1mb'
|
35 |
|
36 | app.options '*', cors()
|
37 |
|
38 | router = new Router {}
|
39 |
|
40 | router.route app
|
41 |
|
42 | @server = app.listen @port, callback
|
43 | enableDestroy @server
|
44 |
|
45 | stop: (callback) =>
|
46 | @server.close callback
|
47 |
|
48 | destroy: =>
|
49 | @server.destroy()
|
50 |
|
51 | module.exports = Server
|