quickstruc
Version:
quickstruc is a Node.js-powered module designed to streamline project scaffolding.
76 lines (59 loc) • 2.22 kB
text/typescript
import { NextFunction, Request, Response } from "express";
import express from "express";
import morgan from "morgan";
import helmet from "helmet";
import compression from "compression";
import cookieParser from "cookie-parser";
import bodyParser from "body-parser";
import hpp from "hpp";
import AuthRouter from "./routes/AuthRouter";
import path from "path";
import AppError from "./utils/AppError";
import { connectDB, sequelize } from "./config/mysqlConfig";
import rateLimitMiddleware from "./middlewares/rateLimiter";
import globalErrorHandler from "./middlewares/globalErrorHandler";
import corsMiddleware from "./middlewares/corsMiddleware";
require("./models/User"); // This will load the User model and its associations
// Sync database and models
sequelize
.sync({ force: false }) // Set force: true only in development to drop and recreate tables
.then(() => {
console.log("Database synced successfully.");
})
.catch((error: any) => {
console.log("Please check if the database is connect or not");
console.log("Error syncing database:", error);
});
connectDB();
// Initialize Express app
const app = express();
app.use(rateLimitMiddleware);
// Middleware: Set security HTTP headers
app.use(helmet());
// Middleware: Prevent HTTP parameter pollution
app.use(hpp());
// Apply CORS middleware globally for all routes
app.use(corsMiddleware);
// Middleware: Development logging
if (process.env.NODE_ENV === "development") {
app.use(morgan("dev"));
}
// Middleware: Body parsers (JSON and URL-encoded data)
app.use(express.json({ limit: "10kb" }));
app.use(express.urlencoded({ extended: true, limit: "10kb" }));
app.use(bodyParser.json());
// Middleware: Cookie parser
app.use(cookieParser());
// Middleware: Response compression
app.use(compression());
// Serve static files
app.use(express.static(path.join(__dirname, "public")));
app.use("/api/user", AuthRouter);
// Catch-all route for undefined endpoints
app.all("*", (req: Request, res: Response, next: NextFunction) => {
next(new AppError(`Cannot find ${req.originalUrl} on this server!`, 404));
});
// Global error handling middleware
app.use(globalErrorHandler);
// Export the app module
export default app;