111 lines
3.4 KiB
JavaScript
111 lines
3.4 KiB
JavaScript
if (process.env.NODE_ENV !== 'production') {
|
|
require('dotenv').config();
|
|
}
|
|
|
|
process.on('uncaughtException', (e) => {
|
|
// prevent errors from killing the server and just log them
|
|
console.error(e);
|
|
});
|
|
|
|
const config = require('./setup/config');
|
|
const debug = require('debug')('server-connect:server');
|
|
const secure = require('./setup/secure');
|
|
const routes = require('./setup/routes');
|
|
const sockets = require('./setup/sockets');
|
|
const upload = require('./setup/upload');
|
|
const cron = require('./setup/cron');
|
|
const http = require('http');
|
|
const express = require('express');
|
|
const endmw = require('express-end');
|
|
const cookieParser = require('cookie-parser');
|
|
const session = require('./setup/session'); //require('express-session')(Object.assign({ secret: config.secret }, config.session));
|
|
const cors = require('cors');
|
|
const app = express();
|
|
|
|
app.set('trust proxy', true);
|
|
app.set('view engine', 'ejs');
|
|
app.set('view options', { root: 'views', async: true });
|
|
|
|
app.disable('x-powered-by')
|
|
|
|
if (config.compression) {
|
|
const compression = require('compression');
|
|
app.use(compression());
|
|
}
|
|
|
|
if (config.abortOnDisconnect) {
|
|
app.use((req, res, next) => {
|
|
req.isDisconnected = false;
|
|
req.on('close', () => {
|
|
req.isDisconnected = true;
|
|
});
|
|
|
|
next();
|
|
});
|
|
}
|
|
|
|
app.use(cors(config.cors));
|
|
app.use(express.static('public', config.static));
|
|
app.use(express.urlencoded({ extended: true }));
|
|
app.use(express.json({
|
|
verify: (req, res, buf) => {
|
|
req.rawBody = buf.toString()
|
|
}
|
|
}));
|
|
app.use(cookieParser(config.secret));
|
|
app.use(session);
|
|
app.use(endmw);
|
|
|
|
upload(app);
|
|
secure(app);
|
|
routes(app);
|
|
|
|
const server = http.createServer(app);
|
|
const io = sockets(server, session);
|
|
|
|
// Make sockets global available
|
|
global.io = io;
|
|
|
|
module.exports = {
|
|
server, app, io,
|
|
start: function(port) {
|
|
// We add the 404 and 500 routes as last
|
|
app.use((req, res) => {
|
|
// if user has a custom 404 page, redirect to it
|
|
if (req.accepts('html') && req.url != '/404' && app.get('has404')) {
|
|
//res.redirect(303, '/404');
|
|
req.url = '/404';
|
|
app.handle(req, res);
|
|
} else {
|
|
res.status(404).json({
|
|
status: '404',
|
|
message: `${req.url} not found.`
|
|
});
|
|
}
|
|
});
|
|
|
|
app.use((err, req, res, next) => {
|
|
debug(`Got error? %O`, err);
|
|
// if user has a custom 500 page, redirect to it
|
|
if (req.accepts('html') && req.url != '/500' && app.get('has500')) {
|
|
//res.redirect(303, '/500');
|
|
req.url = '/500';
|
|
app.handle(req, res);
|
|
} else {
|
|
res.status(500).json({
|
|
status: '500',
|
|
code: config.debug ? err.code : undefined,
|
|
message: config.debug ? err.message || err : 'A server error occured, to see the error enable the DEBUG flag.',
|
|
stack: config.debug ? err.stack : undefined,
|
|
});
|
|
}
|
|
});
|
|
|
|
cron.start();
|
|
|
|
server.listen(port || config.port, () => {
|
|
console.log(`App listening at http://localhost:${config.port}`);
|
|
});
|
|
}
|
|
};
|