-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.coffee
70 lines (56 loc) · 2.11 KB
/
server.coffee
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
nobone = require 'nobone'
{ kit, service, renderer } = nobone()
{ Promise, _ } = kit
kit.require 'colors'
serveFakeDatasource = ->
kit.glob './kit/datasource/*.coffee'
.then (paths) ->
Promise.all paths.map (p) ->
name = kit.path.basename p, '.coffee'
url = "/datasource/#{name}"
kit.log 'Fake datasource: '.cyan + url
service.get url, require('./' + p)
serveFiles = (port, st, open) ->
compiler = require './kit/compiler'
renderer.fileHandlers['.html'] = compiler.htmlHandler
renderer.fileHandlers['.css'] = compiler.cssHandler
renderer.fileHandlers['.js'] = compiler.jsHandler
renderJade = (route, path, data = {}) ->
service.get route, (req, res) ->
renderer.render(path, '.html').then (tplFn) ->
try
res.send tplFn _.extend(data, req.query)
catch err
kit.err err.stack.red
Promise.resolve().then ->
renderJade '/', 'views/index.jade'
.then ->
kit.glob 'views/ui/**/*.jade'
.then (paths) ->
Promise.all paths.map (p) ->
if p.indexOf('views/ui/include') is 0
name = p.substring(9, p.length - 5)
else
name = kit.path.basename p, '.jade'
kit.log 'Create route: '.cyan + name
renderJade "/#{name}", p, {
uiName: name
}
.then ->
service.use '/st/bower', renderer.static('./bower_components')
service.use '/st', renderer.static(st)
# https://github.com/strongloop/express/blob/master/examples/error-pages/index.js
service.use (req, res, next) ->
res.status(404)
if req.accepts('html')
res.redirect '/'
service.listen port, ->
kit.log 'Start at port: '.cyan + port
if open
kit.open "http://127.0.0.1:#{port}/tab"
class Server
constructor: ([ port, st, open ]) ->
open = open is 'true'
serveFakeDatasource().then ->
serveFiles(port, st, open)
new Server(process.argv[2..4])