1 |
|
2 |
|
3 | const { hasPackage } = require('@sharyn/check-setup')
|
4 |
|
5 | hasPackage('koa', true)
|
6 | hasPackage('koa-router', true)
|
7 | const Koa = require('koa')
|
8 | const router = new (require('koa-router'))()
|
9 |
|
10 | const colors = require('colors/safe')
|
11 | const exitHook = require('exit-hook')
|
12 |
|
13 | const PREFIX = colors.cyan('[sharyn/koa]')
|
14 | const { NODE_ENV } = process.env
|
15 | const PORT = process.env.PORT || 8000
|
16 |
|
17 | let server
|
18 |
|
19 | const stopServer = options => {
|
20 | if (server) {
|
21 | if (!(options && options.silent)) {
|
22 |
|
23 | console.log()
|
24 |
|
25 | console.log(`${PREFIX} Server stopped`)
|
26 | }
|
27 | if (hasPackage('@sharyn/db')) {
|
28 | require('@sharyn/db').knex.destroy()
|
29 | }
|
30 | return server.close()
|
31 | }
|
32 | throw Error('Tried to stop the server but no server was running')
|
33 | }
|
34 |
|
35 | const startServer = (routing, options) => {
|
36 | if (!routing) {
|
37 | throw Error('You must pass a routing function to startServer')
|
38 | }
|
39 |
|
40 | if (!(options && options.silent)) {
|
41 |
|
42 | console.log(`${PREFIX} Server running on port ${PORT} ${NODE_ENV ? `(${NODE_ENV})` : ''}`)
|
43 | exitHook(() => stopServer())
|
44 | }
|
45 |
|
46 | const app = new Koa()
|
47 |
|
48 | if (hasPackage('koa-compress')) {
|
49 | app.use(require('koa-compress')())
|
50 | }
|
51 |
|
52 | if (hasPackage('koa-mount') && hasPackage('koa-static')) {
|
53 | const mount = require('koa-mount')
|
54 | const serveStatic = require('koa-static')
|
55 | app.use(mount('/static', serveStatic('dist'))).use(mount('/static', serveStatic('public')))
|
56 | }
|
57 |
|
58 | if (hasPackage('koa-favicon')) {
|
59 | app.use(require('koa-favicon')(`./public/img/favicon.ico`))
|
60 | }
|
61 |
|
62 | routing(router)
|
63 | app.use(router.routes()).use(router.allowedMethods())
|
64 |
|
65 | server = app.listen((options && options.port) || PORT)
|
66 | }
|
67 |
|
68 | exports.startServer = startServer
|
69 | exports.stopServer = stopServer
|