/
app.js
103 lines (87 loc) · 3.01 KB
/
app.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
/*jslint node: true */
'use strict';
var express = require('express'),
connect = require('connect'),
hbs = require('express-hbs'),
http = require('http'),
fs = require('fs'),
mongoose = require('mongoose'),
passport = require('passport'),
auth = require('./filters/authentication'),
config = require('./config');
module.exports = function(router) {
mongoose.connect([
'mongodb://',config.mongodb.url,':',config.mongodb.port,'/',config.mongodb.name
].join(''));
auth.configure();
var cookieParser = connect.cookieParser('multiplication-game-sess'),
sessionStore = new (require('connect-mongo')(connect))({
db: config.session.db
}),
socketeer = require('./lib/socketeer'),
app = express()
// Performance measurement
.use(function(req, res, next) {
var render = res.render;
app._requestStarted = new Date();
res.render = function() {
app.logger.info('render.time', {
url: req.url,
time: (new Date())-app._requestStarted // in ms
});
render.apply(this, arguments);
}
next();
})
//.use(express.compess())
.use(express.static(__dirname + '/public'))
.use(require('connect-assets')())
.use(cookieParser)
.use(express.session({ store: sessionStore }))
.use(express.bodyParser())
.use(express.methodOverride())
.use(passport.initialize())
.use(passport.session())
.use(connect.query())
.use(socketeer.connect),
server = http.createServer(app),
io = require('socket.io').listen(server),
initializers = fs.readdirSync(__dirname + '/config/initializers');
initializers.forEach(function(filename) {
require(__dirname + '/config/initializers/' + filename)(app);
});
// TODO: use helperContext on connect-assets to get rid of this globals:
css.root = '/stylesheets';
js.root = '/javascripts';
app.engine('hbs', hbs.express3({
partialsDir: __dirname + '/views',
defaultLayout: __dirname + '/views/layouts/website',
layoutsDir: __dirname + '/views/layouts'
}));
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');
// load handlebars helpers
fs.readdirSync(__dirname + '/views/helpers/').forEach(function(filename) {
require(__dirname + '/views/helpers/' + filename);
});
// load all models so they can be used via mongoose.model()
require('./models/game');
require('./models/user');
router(app);
socketeer.start(io);
app.socketeer = socketeer;
app.server = server;
app.io = io;
// Production Readyness
process.on('uncaughtException', function (err) {
app.logger.error('Uncaught Exception: ', { message: err.message, stack: err.stack });
});
app.get('/health', function(req, res){
res.send({
pid: process.pid,
memory: process.memoryUsage(),
uptime: process.uptime()
});
});
return app;
};