-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
115 lines (95 loc) · 3.91 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
'use strict';
var message;
try {
// modules ---------------------------------------------------------------------
var app = require('express')();
var server = require('http').Server(app);
var logger = require('express-logger');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var errorhandler = require('errorhandler');
var colors = require('colors');
var cors = require('cors');
var PrettyError = require('pretty-error');
var cool = require('cool-ascii-faces');
var superb = require('superb');
var Hashids = require('hashids');
var io = require('socket.io')(server);
var auth = require('./config/auth.js');
var port = process.env.PORT || 3000;
var hashids = new Hashids(auth.HASHIDS_SALT);
// db config -------------------------------------------------------------------
mongoose.connect(auth.CONNECTION_URI);
mongoose.connection.on('error', function() {
message = '✗ MongoDB Connection Error. Please make sure MongoDB is running and restart the server.';
console.error(message.red);
});
// global config ---------------------------------------------------------------
app.set('port', port);
app.use(logger({
path: './logfile.txt'
}));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cors());
// env config ------------------------------------------------------------------
if (app.get('env') === 'development') {
message = 'Running in development mode';
console.log(message.yellow);
app.use(errorhandler());
// mongoose.set('debug', true);
}
if (app.get('env') === 'production') {
message = 'Running in production mode';
console.log(message.yellow);
app.use(errorhandler({
dumpExceptions : true,
showStack : true
}));
}
// middleware ------------------------------------------------------------------
var pe = new PrettyError();
app.use(function(err, req, res, next) {
// console.log(err.stack);
console.log(pe.render(err));
res.status(500).send({
type : 'internal_server_error',
message : res.message
});
});
// simplify stack trace
pe.skipNodeFiles(); // this will skip events.js and http.js and similar core node files
pe.skipPackage('express'); // this will skip all the trace lines about express' core and sub-modules
// sockets ---------------------------------------------------------------------
// hash of socket ids to sockets
var clientSocketsHash = {};
// Hash of MongoDB _ids to socket ids
var loggedInClientsHash = {};
io.on('connection', function(socket) {
clientSocketsHash[socket.id] = socket;
console.log('(connection) total connected clients:', Object.keys(clientSocketsHash));
console.log('(connection) total logged in clients:', Object.keys(loggedInClientsHash));
// events ----------------------------------------------------------------------
socket.emit('newSocketId', { id : socket.id });
socket.on('disconnect', function() {
delete clientSocketsHash[socket.id];
console.log('(disconnection) total connected clients:', Object.keys(clientSocketsHash));
console.log('(disconnection) total logged in clients:', Object.keys(loggedInClientsHash));
});
});
// routes ----------------------------------------------------------------------
require('./routes.js')(app, io, clientSocketsHash, loggedInClientsHash);
// run server ------------------------------------------------------------------
server.listen(port, function() {
message = '\n' + superb() + '! ' + cool().yellow + '\nThe express server is now ' +
'listening on port ' + port + '.';
console.log(message.bold.blue);
});
} catch (exception) {
var message = 'Server exception: ' + exception;
console.log(message.bold.red);
}