Files
bodyshop/server.js
Dave Richer eabbc2211b - Minor cleanup
Signed-off-by: Dave Richer <dave@imexsystems.ca>
2024-01-22 17:21:46 -05:00

117 lines
3.9 KiB
JavaScript

// Import core modules
const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
const path = require("path");
const compression = require("compression");
const cookieParser = require("cookie-parser");
const http = require("http");
const {Server} = require("socket.io");
// Load environment variables
require("dotenv").config({
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
});
// Import custom utilities and handlers
const logger = require("./server/utils/logger");
const countRoutes = (app) => {
let routeCount = 0;
app._router.stack.forEach(function(middleware){
if(middleware.route){ // if it's a route, count it
routeCount++;
} else if(middleware.name === 'router'){ // if it's a router, count its routes
middleware.handle.stack.forEach(function(handler){
if(handler.route){
routeCount++;
}
});
}
});
return routeCount;
}
// Express app and server setup
const app = express();
const port = process.env.PORT || 5000;
const server = http.createServer(app);
const io = new Server(server, {
path: "/ws",
cors: {
origin: [
"https://test.imex.online",
"https://www.test.imex.online",
"http://localhost:3000",
"https://imex.online",
"https://www.imex.online",
"https://beta.test.imex.online",
"https://www.beta.test.imex.online",
"https://beta.imex.online",
"https://www.beta.imex.online",
],
methods: ["GET", "POST"],
credentials: true,
exposedHeaders: ["set-cookie"],
},
});
exports.io = io;
require("./server/web-sockets/web-socket");
// Import route handlers (assuming these files are structured accordingly)
const emailRoutes = require("./server/routes/emailRoutes");
const accountingRoutes = require("./server/routes/accountingRoutes");
const mediaRoutes = require("./server/routes/mediaRoutes");
const smsRoutes = require("./server/routes/smsRoutes");
const jobRoutes = require("./server/routes/jobRoutes");
const schedulingRoutes = require("./server/routes/schedulingRoutes");
const utilRoutes = require("./server/routes/utilRoutes");
const dataRoutes = require("./server/routes/dataRoutes");
const adminRoutes = require("./server/routes/adminRoutes");
const techRoutes = require("./server/routes/techRoutes");
const intellipayRoutes = require("./server/routes/intellipayRoutes");
const ioeventRoutes = require("./server/routes/ioeventRoutes");
const osRoutes = require("./server/routes/osRoutes");
const cdkRoutes = require("./server/routes/cdkRoutes");
const miscellaneousRoutes = require("./server/routes/miscellaneousRoutes");
const mixdataRoutes = require("./server/routes/mixDataRoutes");
// Middleware
app.use(compression());
app.use(cookieParser());
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true}));
app.use(cors({credentials: true, exposedHeaders: ["set-cookie"]}));
// Route groupings
app.use('/mixdata', mixdataRoutes);
app.use('/email', emailRoutes);
app.use('/accounting', accountingRoutes);
app.use('/media', mediaRoutes);
app.use('/sms', smsRoutes);
app.use('/job', jobRoutes);
app.use('/scheduling', schedulingRoutes);
app.use('/utils', utilRoutes);
app.use('/data', dataRoutes);
app.use('/admin', adminRoutes);
app.use('/tech', techRoutes);
app.use('/intellipay', intellipayRoutes);
app.use('/ioevent', ioeventRoutes);
app.use('/opensearch', osRoutes);
app.use('/cdk', cdkRoutes);
app.use('/', miscellaneousRoutes);
// Default route for forbidden access
app.get("/", (req, res) => {
res.status(200).send("Access Forbidden.");
});
// Start server
server.listen(port, (error) => {
if (error) throw error;
logger.log(`[${process.env.NODE_ENV || "DEVELOPMENT"}] Server with ${countRoutes(app)} routes running on port ${port}`, "INFO", "api");
});