From ded91e740ac3f3f9586bd4e5daa8822b66dfe95f Mon Sep 17 00:00:00 2001 From: hanoak20 Date: Wed, 17 Jan 2024 15:12:26 +0530 Subject: [PATCH 1/2] feat: made server.ts simple and added middlewares intsead. --- src/middlewares/req-headers.middleware.ts | 18 +++++++++++ .../unmatched-routes.middleware.ts | 9 ++++++ src/server.ts | 30 ++++--------------- 3 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 src/middlewares/req-headers.middleware.ts create mode 100644 src/middlewares/unmatched-routes.middleware.ts diff --git a/src/middlewares/req-headers.middleware.ts b/src/middlewares/req-headers.middleware.ts new file mode 100644 index 00000000..6a71f52b --- /dev/null +++ b/src/middlewares/req-headers.middleware.ts @@ -0,0 +1,18 @@ +import { Request, Response, NextFunction } from "express"; + +export const requestHeadersMiddleware = ( + req: Request, + res: Response, + next: NextFunction +) => { + res.header("Access-Control-Allow-Origin", "*"); + res.header( + "Access-Control-Allow-Headers", + "Origin, Content-Type, Accept, app_token" + ); + if (req.method === "OPTIONS") { + res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); + return res.status(200).json({}); + } + next(); +}; diff --git a/src/middlewares/unmatched-routes.middleware.ts b/src/middlewares/unmatched-routes.middleware.ts new file mode 100644 index 00000000..3a217e8f --- /dev/null +++ b/src/middlewares/unmatched-routes.middleware.ts @@ -0,0 +1,9 @@ +import { Request, Response } from "express"; +import { constants } from "../constants"; + +export const unmatchedRoutesMiddleware = (req: Request, res: Response) => { + const status = constants.HTTP_CODES.NOT_FOUND; + res.status(status).json({ + error: { code: status, message: constants.HTTP_TEXTS.ROUTE_ERROR }, + }); +}; diff --git a/src/server.ts b/src/server.ts index dcbaf130..b0807a84 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,15 +1,16 @@ +// file deepcode ignore UseCsurfForExpress: We've app_token for all the API calls, so we don't need CSRF token. import { config } from "./config"; -import express, { NextFunction, Request, Response } from "express"; +import express from "express"; import cors from "cors"; import helmet from "helmet"; import authRoutes from "./routes/auth.routes"; import projectRoutes from "./routes/projects.routes"; import { errorMiddleware } from "./middlewares/error.middleware"; import loggerMiddleware from "./middlewares/logger.middleware"; -import logger from "./utils/logger"; import connectToDatabase from "./database"; import { authenticateUser } from "./middlewares/auth.middleware"; -import { constants } from "./constants"; +import { requestHeadersMiddleware } from "./middlewares/req-headers.middleware"; +import { unmatchedRoutesMiddleware } from "./middlewares/unmatched-routes.middleware"; try { const app = express(); @@ -23,32 +24,14 @@ try { app.use(express.urlencoded({ extended: false, limit: "10mb" })); app.use(express.json({ limit: "10mb" })); app.use(loggerMiddleware); + app.use(requestHeadersMiddleware); // Routes app.use("/v2/auth", authRoutes); app.use("/v2/org/:orgId/project", authenticateUser, projectRoutes); - app.use((req: Request, res: Response, next: NextFunction) => { - res.setHeader("Access-Control-Allow-Origin", "*"); - res.setHeader( - "Access-Control-Allow-Methods", - "OPTIONS, GET, POST, PUT, PATCH, DELETE" - ); - res.setHeader( - "Access-Control-Allow-Headers", - "Content-Type, Authorization" - ); - res.setHeader("Access-Control-Allow-Credentials", "true"); - next(); - }); - //For unmatched route patterns - app.use((req: Request, res: Response) => { - const status = constants.HTTP_CODES.NOT_FOUND; - res.status(status).json({ - error: { code: status, message: constants.HTTP_TEXTS.ROUTE_ERROR }, - }); - }); + app.use(unmatchedRoutesMiddleware); // Connect to DB connectToDatabase(); @@ -59,7 +42,6 @@ try { app.listen(config.PORT, () => { console.info(`Server listening at port ${config.PORT}`); }); - logger.info("Connected node"); } catch (e) { console.error("Error while starting the server!"); console.error(e); From 6952c96996c4525d7ef3cdbcfe2b07caa9e3da01 Mon Sep 17 00:00:00 2001 From: hanoak20 Date: Wed, 17 Jan 2024 16:45:42 +0530 Subject: [PATCH 2/2] chore: simplified db connection along with starting the server. --- src/database.ts | 2 +- src/server.ts | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/database.ts b/src/database.ts index 9f69d6f8..1c8bc829 100644 --- a/src/database.ts +++ b/src/database.ts @@ -17,7 +17,7 @@ const connectToDatabase = async () => { await AuthenticationModel.init(); await AuditLogModel.init(); } catch (error) { - logger.error("Error connecting to MongoDB:", error); + logger.error("Error while connecting to MongoDB:", error); process.exit(1); } }; diff --git a/src/server.ts b/src/server.ts index b0807a84..5d9283b0 100644 --- a/src/server.ts +++ b/src/server.ts @@ -11,6 +11,7 @@ import connectToDatabase from "./database"; import { authenticateUser } from "./middlewares/auth.middleware"; import { requestHeadersMiddleware } from "./middlewares/req-headers.middleware"; import { unmatchedRoutesMiddleware } from "./middlewares/unmatched-routes.middleware"; +import logger from "./utils/logger"; try { const app = express(); @@ -33,16 +34,17 @@ try { //For unmatched route patterns app.use(unmatchedRoutesMiddleware); - // Connect to DB - connectToDatabase(); - // Error Middleware app.use(errorMiddleware); - app.listen(config.PORT, () => { - console.info(`Server listening at port ${config.PORT}`); - }); + // starting the server & DB connection. + (async () => { + await connectToDatabase(); + app.listen(config.PORT, () => + logger.info(`Server listening at port ${config.PORT}`) + ); + })(); } catch (e) { - console.error("Error while starting the server!"); - console.error(e); + logger.error("Error while starting the server!"); + logger.error(e); }