-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
73 lines (60 loc) · 2.21 KB
/
Copy pathserver.js
File metadata and controls
73 lines (60 loc) · 2.21 KB
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
require('dotenv').load();
var express = require('express'),
expressValidator = require('express-validator'),
compression = require('compression'),
models = require('./models'),
session = require('express-session'),
bodyParser = require('body-parser'),
sessionFileStore = require('session-file-store')(session),
app = express(),
server;
//quick hack to make this into a global variable (not a good idea to do in production)
appSumoInitialized = false;
//create database tables on initial run
models.sequelize.sync().then(function () {
//check to see if the website is being loaded for the very first time
models.User.count().then(function(userCount) {
appSumoInitialized = userCount > 0;
//session middleware
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
store: new sessionFileStore()
}));
//gzip all output (TODO: images should not be gzipped in production)
app.use(compression());
//parse json from request (for RESTful APIs)
app.use(bodyParser.json());
//validation handler
app.use(expressValidator({
errorFormatter: function(param, msg, value) {
var namespace = param.split('.'), root = namespace.shift(), formParam = root;
return {param:formParam, message:msg, value:value};
}
}));
//RESTful APIs routes
app.use(['/auth', '/api'], require('./routes/middleware'));
app.use('/auth', require('./routes/auth'));
app.use('/api/users', require('./routes/api/user'));
app.use('/api/questions', require('./routes/api/question'));
app.use('/api/user-answers', require('./routes/api/userAnswer'));
//redirect to /initialize page when website is loaded for the very first time
app.use(function(req, res, next) {
if(!appSumoInitialized && req.url == '/')
res.redirect('/initialize');
else
next()
});
//deliver public static content
app.use(express.static(__dirname + '/public'));
//always deliver index.html on 404 (let front-end handle 404 rerouting)
app.use(function(req, res, next) {
res.sendFile(__dirname + '/public/index.html');
});
//start the server
server = app.listen(process.env.SERVER_PORT, function() {
console.log('Express server listening on port ' + server.address().port);
});
});
});