app.js 2.6 KB

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