| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- const env = require("./env");
- const cookieParser = require("cookie-parser");
- const passport = require("passport");
- const express = require("express");
- const helmet = require("helmet");
- const path = require("path");
- const hbs = require("hbs");
- const helpers = require("./handlers/helpers.handler");
- const renders = require("./handlers/renders.handler");
- const asyncHandler = require("./utils/asyncHandler");
- const locals = require("./handlers/locals.handler");
- const links = require("./handlers/links.handler");
- const routes = require("./routes");
- const utils = require("./utils");
- // run the cron jobs
- // the app might be running in cluster mode (multiple instances) so run the cron job only on one cluster (the first one)
- // NODE_APP_INSTANCE variable is added by pm2 automatically, if you're using something else to cluster your app, then make sure to set this variable
- if (env.NODE_APP_INSTANCE === 0) {
- require("./cron");
- }
- // intialize passport authentication library
- require("./passport");
- // create express app
- const app = express();
- // this tells the express app that it's running behind a proxy server
- // and thus it should get the IP address from the proxy server
- if (env.TRUST_PROXY) {
- app.set("trust proxy", true);
- }
- app.use(helmet({ contentSecurityPolicy: false }));
- app.use(cookieParser());
- app.use(express.json());
- app.use(express.urlencoded({ extended: true }));
- // serve static
- app.use("/images", express.static("custom/images"));
- app.use("/css", express.static("custom/css", { extensions: ["css"] }));
- app.use(express.static("static"));
- app.use(passport.initialize());
- app.use(locals.isHTML);
- app.use(locals.config);
- // template engine / serve html
- app.set("view engine", "hbs");
- app.set("views", [
- path.join(__dirname, "../custom/views"),
- path.join(__dirname, "views"),
- ]);
- utils.registerHandlebarsHelpers();
- // if is custom domain, redirect to the set homepage
- app.use(asyncHandler(links.redirectCustomDomainHomepage));
- // render html pages
- app.use("/", routes.render);
- // handle api requests
- app.use("/api/v2", routes.api);
- app.use("/api", routes.api);
- // finally, redirect the short link to the target
- app.get("/:id", asyncHandler(links.redirect));
- // 404 pages that don't exist
- app.get("*", renders.notFound);
- // handle errors coming from above routes
- app.use(helpers.error);
-
- app.listen(env.PORT, () => {
- console.log(`> Ready on http://localhost:${env.PORT}`);
- });
|