app.js 2.1 KB

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