-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathserver.js
96 lines (85 loc) · 2.31 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
'use strict';
var Hapi = require('hapi');
var chalk = require('chalk');
var ejs = require('./lib/ejs');
var moment = require('moment');
var path = require('path');
var pathIsAbsolute = require('path-is-absolute');
module.exports = function init(opts) {
opts = opts || {};
opts.port = opts.port || 3000;
opts.cwd = opts.cwd || process.cwd();
// server opts
var serverOpts = {
cors: true,
views: {
isCached: true,
path: path.join(__dirname, 'templates'),
engines: {
ejs: {
module: ejs
}
}
}
};
if (opts.dev) {
serverOpts.debug = {
request: ['error']
};
serverOpts.views.isCached = false;
}
var server = new Hapi.Server('0.0.0.0', opts.port, serverOpts);
server.settings.app = opts;
if (opts.dbd && pathIsAbsolute(opts.dbd)) {
server.settings.app.dbd = opts.dbd;
} else {
server.settings.app.dbd = path.join(opts.cwd, (opts.dbd || 'run'));
}
// logging
server.on('request', function(request, event) {
var statics = ['css', 'img', 'js'];
var log = true;
if (event.data && event.data.url) {
if (event.data.url === '/favicon.ico') {
return;
}
for (var i = 0, il = statics.length; i < il; i++) {
if (event.data.url.substr(1, statics[i].length) === statics[i]) {
log = false;
break;
}
}
if (log) {
console.log(chalk.blue('[spook] ' + moment().format('YYYY-MM-DD HH:mm:ss') + ' ' + event.data.url));
}
}
});
// io
require('./lib/io')(server.listener);
// db
require('./lib/db')({
dbd: server.settings.app.dbd,
prune: opts.prune
}, function(err, res) {
if (err) {
console.log(err);
return;
}
// setup the runner
require('./lib/runner')({
cwd: server.settings.app.cwd,
dbd: server.settings.app.dbd,
concurrent: server.settings.app.concurrent,
'parallel-limit': server.settings.app['parallel-limit']
});
server.route(require('./routes/static'));
server.route(require('./routes/runnables')({
dbd: server.settings.app.dbd
}));
server.route(require('./routes'));
server.ext('onPreResponse', require('./server/onPreResponse'));
server.start(function() {
console.log(chalk.blue('[spook] server started on port', opts.port));
});
});
};