server.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const env = require("./env");
  2. const asyncHandler = require("express-async-handler");
  3. const cookieParser = require("cookie-parser");
  4. const compression = require("compression");
  5. const passport = require("passport");
  6. const express = require("express");
  7. const helmet = require("helmet");
  8. const morgan = require("morgan");
  9. const path = require("path");
  10. const hbs = require("hbs");
  11. const helpers = require("./handlers/helpers.handler");
  12. const links = require("./handlers/links.handler");
  13. const { stream } = require("./config/winston");
  14. const routes = require("./routes");
  15. const utils = require("./utils");
  16. // import "./cron";
  17. require("./passport");
  18. const app = express();
  19. // enable gzip on dev
  20. if (env.isDev) {
  21. app.use(compression());
  22. }
  23. // TODO: comments
  24. app.set("trust proxy", true);
  25. if (env.isDev) {
  26. app.use(morgan("combined", { stream }));
  27. }
  28. app.use(helmet({ contentSecurityPolicy: false }));
  29. app.use(cookieParser());
  30. app.use(express.json());
  31. app.use(express.urlencoded({ extended: true }));
  32. app.use(express.static("static"));
  33. app.use(passport.initialize());
  34. // app.use(helpers.ip);
  35. app.use(helpers.isHTML);
  36. app.use(helpers.addConfigLocals);
  37. // template engine / serve html
  38. app.set("view engine", "hbs");
  39. app.set("views", path.join(__dirname, "views"));
  40. utils.registerHandlebarsHelpers();
  41. app.use("/", routes.render);
  42. // if is custom domain, redirect to the set homepage
  43. app.use(asyncHandler(links.redirectCustomDomainHomepage));
  44. app.use("/api/v2", routes.api);
  45. app.use("/api", routes.api);
  46. // finally, redirect the short link to the target
  47. app.get("/:id", asyncHandler(links.redirect));
  48. // Error handler
  49. app.use(helpers.error);
  50. app.listen(env.PORT, () => {
  51. console.log(`> Ready on http://localhost:${env.PORT}`);
  52. });