UNPKG

create-express-minco

Version:

A modern Express.js project generator with TailwindCSS, EJS, ESModules, and JWT auth.

83 lines (64 loc) 2.06 kB
import createError from "http-errors"; import express from "express"; import path from "path"; import cookieParser from "cookie-parser"; import { fileURLToPath } from "url"; import { dirname } from "path"; import coreRouter from "./routes/index.route.js"; import { setupLiveReload } from "./middleware/core/live-reload.middleware.js"; import { logRequest } from "./middleware/core/log-request.middleware.js"; import dotenv from "dotenv"; import expressEjsLayouts from "express-ejs-layouts"; dotenv.config(); const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const app = express(); setupLiveReload(app); console.log("mode: ", app.get("env")); app.use(logRequest); // SET View Engine app.set("views", path.join(__dirname, "views")); app.set("view engine", "ejs"); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, "public"))); // EJS LAYOUTS app.use((req, res, next) => { res.locals.title ??= `${process.env.PROJECT_NAME || "Express Minco"}`; next(); }); app.use(expressEjsLayouts); app.set("layout", "layouts/main"); // ROUTES CONFIGURE app.use("/", coreRouter); app.use((req, res, next) => { res.locals.env = req.app.get("env"); next(); }); // Handle well-known paths to suppress unnecessary 404 logs app.use('/.well-known', (req, res, next) => { res.status(204).end(); }); // ERROR HANDLER app.use((req, res, next) => { next(createError(404)); }); app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.env = req.app.get("env"); res.locals.error = { status: err.status, stack: req.app.get("env") === "development" ? err.stack : null, }; const statusCode = err.status || 500; const url = `\x1b[36m${req.originalUrl}\x1b[0m`; console.error( `\x1b[37m\x1b[40m${new Date().toISOString()}\x1b[0m \x1b[31m${statusCode} - ${url} \x1b[0m → ${ err.message }` ); res.status(err.status || 500); res.render("error"); }); export default app;