This repository was archived by the owner on Nov 27, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
98 lines (77 loc) · 2.66 KB
/
server.js
File metadata and controls
98 lines (77 loc) · 2.66 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
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
#!/usr/bin/env node
'use strict';
const crypto = require('crypto');
const fs = require('fs');
const path = require('path');
const webpack = require('webpack');
const webpackDevMiddleware = require('webpack-dev-middleware');
const webpackHotMiddleware = require('webpack-hot-middleware');
const express = require('express');
const app = express();
const server = require('http').Server(app);
const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);
const io = require('socket.io')(server);
const webpackConfig = require('./webpack.config');
const cogJson = JSON.parse(fs.readFileSync(
path.join(__dirname, 'cog.json'),
{encoding: 'utf8'},
));
const isProduction = process.env.NODE_ENV === 'production';
server.listen(cogJson.port, () => {
console.log(`Server listening on 0.0.0.0:${cogJson.port}`);
});
let store = undefined;
if (isProduction) {
store = new MongoDBStore({
uri: `mongodb://${cogJson.mongo.host}/cais`,
collection: 'sessions',
});
}
// Session
const sessionMiddleware = session({
key: 'express.sid',
secret: isProduction ? crypto.randomBytes(20).toString('hex') : 'secret',
saveUninitialized: true,
resave: false,
store: store,
});
if (!isProduction) {
//reload=true:Enable auto reloading when changing JS files or content
//timeout=1000:Time from disconnecting from server to reconnecting
webpackConfig.entry.app.unshift('webpack-hot-middleware/client?reload=true&timeout=1000');
//Add HMR plugin
webpackConfig.plugins.push(new webpack.HotModuleReplacementPlugin());
const compiler = webpack(webpackConfig);
//Enable "webpack-dev-middleware"
app.use(webpackDevMiddleware(compiler, {
publicPath: webpackConfig.output.publicPath,
}));
//Enable "webpack-hot-middleware"
app.use(webpackHotMiddleware(compiler));
}
// App
app.use(express.json());
app.use(sessionMiddleware);
app.use('/api/auth', require('./src/server/api/auth'));
app.use('/api/machine', require('./src/server/api/machine'));
app.use('/api/service', require('./src/server/api/service'));
app.use('/', express.static('public'));
if (isProduction) {
for (const file of fs.readdirSync(path.join(__dirname, 'dist'))) {
app.use(`/js/${file}`, express.static(path.join(__dirname, 'dist', file)));
}
}
app.use(
'/css/fontawesome',
express.static(path.join(__dirname, 'node_modules', '@fortawesome', 'fontawesome-free', 'css')),
);
app.use(
'/css/webfonts',
express.static(path.join(__dirname, 'node_modules', '@fortawesome', 'fontawesome-free', 'webfonts')),
);
// Start socket manager
io.use((socket, next) => {
sessionMiddleware(socket.request, socket.request.res, next);
});
require('./src/server/io')(io);