-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
75 lines (60 loc) · 1.73 KB
/
index.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
'use strict'
// load environment
const port = process.env.PORT || 4000
const appKey = process.env.APP_KEY || '$eCuRiTy'
// load external dependencies
const express = require('express')
const http = require('http')
const session = require('express-session')
const MongoStore = require('connect-mongo')(session);
// load utils
const dbClient = require('./utils/mongodb-client')
const logger = require('./utils/logger')
async function init() {
// connect to DB
await dbClient.connect()
// create shared sessionParser for http & ws
const sessionParser = session({
saveUninitialized: true,
secret: appKey,
resave: false,
store: new MongoStore({client: dbClient}),
})
// load remaining internal dependencies
const wsServer = require('./lib/websocket-server')
const routes = require('./routes/index')
const User = require('./models/user')
// create app
const app = express()
if (process.env.NODE_ENV === 'production') {
app.set('trust proxy', true)
}
app.use(sessionParser)
app.use(express.static('client/dist', {index: '_'}))
app.use('/', routes)
// create server
const server = http.createServer(app)
server.on('upgrade', (req, socket, head) => {
sessionParser(req, {}, () => {
if (!req.session.userId) {
const user = new User()
req.session.userId = user.id
}
wsServer.handleUpgrade(req, socket, head, function (ws) {
wsServer.emit('connection', ws, req)
})
})
})
server.listen(port, () => {
logger.info(`Server listening on ${port}`)
})
process.on('SIGTERM', () => {
server.close(() => {
logger.info('Process terminated')
})
})
}
init()
.catch((err) => {
logger.error(`Error initializing server: `, err)
})