app.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. const express = require("express");
  2. const session = require("cookie-session");
  3. const mongoose = require("mongoose");
  4. const compression = require("compression");
  5. const https = require("https");
  6. const fs = require("fs");
  7. const cssmerger = require("cssmerger");
  8. const esbuild = require("esbuild");
  9. const app = express();
  10. app.set("view engine", "ejs");
  11. let mongooseOptions = {
  12. useNewUrlParser: true,
  13. useUnifiedTopology: true,
  14. useFindAndModify: false,
  15. useCreateIndex: true,
  16. dbName: "inventory-management"
  17. };
  18. let sessionOptions = {
  19. secret: "Super Secret Subline Subliminally Saving Secrets So Sneaky Snakes Stay Sullen. Simply Superb.",
  20. sameSite: "lax",
  21. saveUninitialized: true,
  22. resave: false,
  23. };
  24. let cssOptions = {
  25. recursive: true,
  26. miminize: false
  27. };
  28. let esbuildOptions = {
  29. entryPoints: ["./views/dashboardPage/js/dashboard.js"],
  30. bundle: true,
  31. minify: false,
  32. outfile: "./views/dashboardPage/bundle.js"
  33. };
  34. app.use(express.static(__dirname + "/views"));
  35. let httpsServer = {};
  36. if(process.env.NODE_ENV === "production"){
  37. httpsServer = https.createServer({
  38. key: fs.readFileSync("/etc/letsencrypt/live/www.thesubline.com/privkey.pem", "utf8"),
  39. cert: fs.readFileSync("/etc/letsencrypt/live/www.thesubline.com/fullchain.pem", "utf8")
  40. }, app);
  41. app.use((req, res, next)=>{
  42. if(req.secure === true){
  43. next();
  44. }else{
  45. res.redirect(`https://${req.headers.host}${req.url}`);
  46. }
  47. });
  48. sessionOptions.domain = process.env.COOKIE_DOMAIN;
  49. sessionOptions.secure = true;
  50. cssOptions.minimize = true;
  51. mongooseOptions.auth = {authSource: "admin"};
  52. mongooseOptions.user = "website";
  53. mongooseOptions.pass = process.env.MONGODB_PASS;
  54. esbuildOptions.minify = true;
  55. }
  56. mongoose.connect(`mongodb://127.0.0.1:27017/inventory-management`, mongooseOptions);
  57. app.use(compression());
  58. app.use(express.urlencoded({extended: true}));
  59. app.use(express.json());
  60. app.use(session(sessionOptions));
  61. require("./routes")(app);
  62. esbuild.buildSync(esbuildOptions);
  63. cssmerger([
  64. "./views/shared/css/general.css",
  65. "./views/shared/css/loader.css",
  66. "./views/shared/css/banner.css",
  67. "./views/dashboardPage/css"
  68. ], "./views/dashboardPage/bundle.css", cssOptions);
  69. if(process.env.NODE_ENV === "production"){
  70. httpsServer.listen(process.env.HTTPS_PORT, ()=>{});
  71. }
  72. app.listen(process.env.PORT, ()=>{});