MicroHack-Registrations-RestAPI / src / app.ts
app.ts
Raw
// Import necessary configuration and modules
import {
  PORT,
  InDev,
  StaticRoot,
  MediaRoute,
  Static_Cache_Age,
} from "./config/Env";
import "./utils/Events";
import "./config/CheckableEnv";
import express, { Request, Response, NextFunction } from "express";
import cookieParser from "cookie-parser";
import cors from "cors";
import { errorMiddleware } from "./middlewares/error.middleware";
import { DevCors, ProductionCors } from "./utils/Cors";
import { ErrorResponse, SuccessResponse } from "./utils/Response";
import { HttpCodes } from "./config/Errors";
import System from "./settings";
import SetRouters from "./routes/index";
/**
 * The Express application instance.
 * @type {express.Application}
 *
 *
 */
export const app = express();

/**
 * Configure serving static files from the specified root directory if `StaticRoot` is set.
 */
if (StaticRoot)
  app.use(MediaRoute, express.static(StaticRoot, { maxAge: Static_Cache_Age }));

/**
 * Enable CORS middleware based on the environment.
 */
app.use(InDev ? cors(DevCors) : cors(ProductionCors));

/**
 * Parse cookies in the Express application.
 */
app.use(cookieParser());

/**
 * Parse incoming request bodies as URL-encoded data.
 */
app.use(express.urlencoded({ extended: true }));

/**
 * Parse incoming request bodies as JSON.
 */
app.use(express.json());

/**
 * Set up general routes using the `SetRouters` function.
 */
SetRouters(app);

/**
 * Enable the Express application to trust the first proxy.
 */
app.set("trust proxy", true);

/**
 * Route to handle requests that do not match any defined routes, returning a 404 response.
 */
app.use("*", (req: Request, res: Response, next: NextFunction) =>
  ErrorResponse(
    res,
    HttpCodes.NotImplemented.code,
    HttpCodes.NotImplemented.message
  )
);

/**
 * Middleware for handling errors throughout the application.
 */
app.use(errorMiddleware);

/**
 * Start the MongoDB connection and then listen on the specified PORT.
 */
if (process.env.NODE_ENV !== "test") {
  System.Start().then(async () => {
    app.listen(PORT, () => {
      // Display server and backend URLs upon successful server start.
      const port_msg = `Server running on port: ${PORT}.`;
      const url_msg = `The backend is open in:  http://localhost:${PORT} .`;
      const max_length = Math.max(url_msg.length, port_msg.length) + 4;
      const n = Math.floor((max_length - port_msg.length) / 2);
      const m = Math.floor((max_length - url_msg.length) / 2);

      console.log(" " + "-".repeat(max_length));
      console.log(`|${" ".repeat(n)}${port_msg}${" ".repeat(n)}|`);
      console.log(`|${" ".repeat(m)}${url_msg}${" ".repeat(m)}|`);
      console.log(" " + "-".repeat(max_length));
    });
  });
}
app.set('trust proxy', true);


export async function StopServer() {
  await System.Stop();
}