forked from twitter-archive/ospriet
/
server.js
105 lines (88 loc) · 2.87 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
/*
* Copyright 2012 Twitter, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var matador = require('matador')
var fs = require('fs')
app.configure(function () {
app.set('models', __dirname + '/app/models')
app.set('helpers', __dirname + '/app/helpers')
app.set('views', __dirname + '/app/views')
app.set('controllers', __dirname + '/app/controllers')
app.set('services', __dirname + '/app/services')
// added code
app.set('config', __dirname + '/app/config')
var configStore = {}
function fetchConfig() {
configStore = require(app.set('config') + '/application')
var env = process.env.NODE_ENV
if (!env) env = 'production' // default to production
var env_config_file = app.set('config') + '/environments/' + env + '.js'
try {
var stat = fs.statSync(env_config_file)
if (!stat.isFile()) return
v.extend(configStore, require(env_config_file))
} catch (e) {
return
}
}
fetchConfig()
app.getConfig = function () {
return configStore
}
var serviceList = ['Stream']
var serviceStore = []
function initServices() {
v(serviceList).each(function (name) {
serviceStore.push({
name: name.toLowerCase()
, instance: (new (require(app.set('services') + '/' + name + 'Service')))
})
})
}
function startServices() {
v(serviceStore).each(function (service) {
service.instance.init()
})
}
initServices()
startServices()
// added methods
app.getService = function (name) {
name = name.toLowerCase()
var service = v(serviceStore).filter(function (service) {
if (service.name === name) {
return true
}
return false
})
return service[0].instance
}
// end added code
app.set('view engine', 'html')
app.register('.html', matador.engine)
app.use(matador.cookieParser())
app.use(matador.bodyParser())
app.use(matador.methodOverride())
app.use(matador.static(__dirname + '/public'))
app.set('viewPartials', matador.partials.build(app.set('views')))
})
app.configure('development', function () {
app.use(matador.errorHandler({ dumpExceptions: true, showStack: true }))
})
app.configure('production', function () {
app.use(matador.errorHandler())
})
matador.mount(require('./app/config/routes'))
app.listen(app.getConfig().server_port)
console.log('matador running on port ' + app.getConfig().server_port)