-
Notifications
You must be signed in to change notification settings - Fork 84
/
Copy pathserver.js
executable file
·146 lines (98 loc) · 2.7 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env node
'use strict';
/*eslint-disable no-console*/
//
// Require some modules
//
var fs = require('fs');
var path = require('path');
var jade = require('jade');
var connect = require('connect');
var Mincer = require('..');
//
// Get Mincer environment
//
var environment = require('./environment');
//
// Create connect application
//
var app = connect();
//
// Attach assets server
//
app.use('/assets/', Mincer.createServer(environment));
//
// Prepare HTML layout for our dummy application
// See `views/layout.jade` for example of `javascript` and `stylesheet` usage.
//
var view;
try {
view = fs.readFileSync(path.join(__dirname, 'views', 'layout.jade'), 'utf8');
view = jade.compile(view);
} catch (err) {
console.error('Failed compile view: ' + (err.message || err.toString()));
process.exit(128);
}
//
// Define some view helpers
//
var viewHelpers = {};
// dummy helper that injects extension
function rewrite_extension(source, ext) {
var source_ext = path.extname(source);
return (source_ext === ext) ? source : (source + ext);
}
viewHelpers.javascript = function javascript(logicalPath) {
var asset = environment.findAsset(logicalPath);
if (!asset) {
// this will help us notify that given logicalPath is not found
// without "breaking" view renderer
return '<script type="application/javascript">alert("Javascript file ' +
JSON.stringify(logicalPath).replace(/"/g, '\\"') +
' not found.")</script>';
}
return '<script type="application/javascript" src="/assets/' +
rewrite_extension(asset.digestPath, '.js') +
'"></script>';
};
viewHelpers.stylesheet = function stylesheet(logicalPath) {
var asset = environment.findAsset(logicalPath);
if (!asset) {
// this will help us notify that given logicalPath is not found
// without "breaking" view renderer
return '<script type="application/javascript">alert("Stylesheet file ' +
JSON.stringify(logicalPath).replace(/"/g, '\\"') +
' not found.")</script>';
}
return '<link rel="stylesheet" type="text/css" href="/assets/' +
rewrite_extension(asset.digestPath, '.css') +
'" />';
};
//
// Attach some dummy handler, that simply renders layout
//
app.use(function (req, res, next) {
var data;
if (req.url !== '/') {
res.statusCode = 404;
res.end('Not Found');
return;
}
try {
data = view(viewHelpers);
} catch (err) {
next(err);
return;
}
res.end(data);
});
//
// Start listening
//
app.listen(3000, function (err) {
if (err) {
console.error('Failed start server: ' + (err.message || err.toString()));
process.exit(128);
}
console.info('Listening on localhost:3000');
});