/
server.js
75 lines (61 loc) · 1.74 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
var argv = require('optimist')
.demand('url')
.demand('tests')
.options('mount', {
desc : 'Prefix to mount testling routes at',
default : '/testling',
})
.default('port', 8080)
.argv
;
var testDir = argv.tests;
var fs = require('fs');
var util = require('util');
var path = require('path');
var url = require('url');
var version = JSON.parse(fs.readFileSync(__dirname + '/package.json')).version;
var browserify = require('browserify');
var express = require('express');
var app = express.createServer();
app.use(argv.mount, express.static(__dirname + '/static'));
var jadeify = require('jadeify');
util.print('Generating bundle... ');
var bundle = browserify({
mount : argv.mount + '/browserify.js',
})
.require({ jquery : 'jquery-browserify' })
.use(jadeify(__dirname + '/views'))
.addEntry(__dirname + '/browser/main.js')
;
fs.readdirSync(testDir)
.map(function (file) { return path.resolve(testDir, file) })
.forEach(function (file) {
bundle.require(file, { target : '/_tests/' + path.basename(file) })
})
;
console.log('done');
app.helpers({
mount : argv.mount,
version : version,
});
app.get(argv.mount, function (req, res) {
res.render('index.jade', {
layout : false,
version : version,
});
});
var httpProxy = require('http-proxy');
var proxy = new httpProxy.HttpProxy();
app.use(bundle);
app.use(function (req, res, next) {
if (req.url.slice(0, argv.mount.length) !== argv.mount) {
var u = url.parse(argv.url);
proxy.proxyRequest(req, res, {
host : u.hostname,
port : u.port || 80,
});
}
else next();
});
console.log('Listening on :' + argv.port + argv.mount);
app.listen(argv.port);