2024-12-02 01:38:02 +01:00

102 lines
3.3 KiB
JavaScript

//Server logic. Imports all necessary routes, models, etc
import express from 'express';
import mongoose from 'mongoose';
import session from "express-session";
import MongoStore from "connect-mongo";
import { userRouter, sessionRouter, livepeerRouter } from './routes/index.js';
import {
NODE_PORT, NODE_ENV, MONGO_URI, SESS_NAME, SESS_SECRET,
SESS_LIFETIME , MONGO_URI_DEV, MONGO_URI_LOCAL, CONF_SIMPLE_MODE,
CONF_DISABLE_DB
} from "./config.js";
// Env variable which determines which DB to connect to
const { NODE_ENV: mode } = process.env;
mongoose.connection.on('connected', () => {
console.log('Mongoose connected to MongoDB');
});
mongoose.connection.on('error', (err) => {
console.error('Mongoose connection error:', err);
});
(async () => {
try {
// Make DB connection if needed
let clientP;
if (!CONF_SIMPLE_MODE && !CONF_DISABLE_DB){
if (mode == "production"){
clientP = mongoose.connect(MONGO_URI).then(m => m.connection.getClient());
}else if (mode == "development"){
clientP = mongoose.connect(MONGO_URI_DEV).then(m => m.connection.getClient());
}else if (mode == "local"){
clientP = mongoose.connect(MONGO_URI_LOCAL).then(m => m.connection.getClient());
}else{
clientP = mongoose.connect(MONGO_URI).then(m => m.connection.getClient());
}
console.log('MongoDB connected on ' + mode);
}else{
console.log('Running without a database connection' );
}
// Web application framework
const app = express();
app.disable('x-powered-by');
// Parses and validates requests to make things harder for malicious actors
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
if (!CONF_SIMPLE_MODE && !CONF_DISABLE_DB){
// Declare session data
app.use(session({
name: SESS_NAME,
//TODO: change secret in config file
secret: SESS_SECRET,
//define where to store them
store: MongoStore.create({
clientPromise: clientP,
collectionName: 'session',
ttl: parseInt(SESS_LIFETIME) / 1000,
}),
saveUninitialized: false,
proxy: NODE_ENV === "production",
resave: false,
//cookie to send to users
cookie: {
sameSite: false,
secure: false,
maxAge: parseInt(SESS_LIFETIME)
}
}));
}
// Define endpoint paths
const apiRouter = express.Router();
// Catch any requests from /api/* and send it to the appropriate routes
app.use('/api', apiRouter);
apiRouter.use('/users', userRouter);
apiRouter.use('/session', sessionRouter);
apiRouter.use('/livepeer', livepeerRouter);
// Error handler
app.use(function(err, req, res, next) {
res.locals.message = err.message;
// Also log it to the console
console.log(`${err.status || 500} - ${err.message} - ${req.originalUrl} - ${req.method} - ${req.ip}`);
// Render the error page
res.status(err.status || 500);
res.json({
message: err.message,
error: err
});
});
// Start listening on the defined port
app.listen(NODE_PORT, "0.0.0.0", function () {
console.log(`Listening on port ${NODE_PORT}`);
});
} catch (err) {
console.log(err);
}
})();