server.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import env from "./env";
  2. import asyncHandler from "express-async-handler";
  3. import cookieParser from "cookie-parser";
  4. import passport from "passport";
  5. import express from "express";
  6. import helmet from "helmet";
  7. import morgan from "morgan";
  8. import nextApp from "next";
  9. import Raven from "raven";
  10. import * as helpers from "./handlers/helpers";
  11. import * as links from "./handlers/links";
  12. import * as auth from "./handlers/auth";
  13. import { initializeDb } from "./knex";
  14. import __v1Routes from "./__v1";
  15. import routes from "./routes";
  16. import "./cron";
  17. import "./passport";
  18. if (env.RAVEN_DSN) {
  19. Raven.config(env.RAVEN_DSN).install();
  20. }
  21. const port = env.PORT;
  22. const app = nextApp({ dir: "./client", dev: env.isDev });
  23. const handle = app.getRequestHandler();
  24. app.prepare().then(async () => {
  25. await initializeDb();
  26. const server = express();
  27. server.set("trust proxy", true);
  28. if (env.isDev) {
  29. server.use(morgan("dev"));
  30. }
  31. server.use(helmet());
  32. server.use(cookieParser());
  33. server.use(express.json());
  34. server.use(express.urlencoded({ extended: true }));
  35. server.use(passport.initialize());
  36. server.use(express.static("static"));
  37. server.use(helpers.ip);
  38. server.use(asyncHandler(links.redirectCustomDomain));
  39. server.use("/api/v2", routes);
  40. server.use("/api", __v1Routes);
  41. server.get(
  42. "/reset-password/:resetPasswordToken?",
  43. asyncHandler(auth.resetPassword),
  44. (req, res) => app.render(req, res, "/reset-password", { token: req.token })
  45. );
  46. server.get(
  47. "/verify/:verificationToken?",
  48. asyncHandler(auth.verify),
  49. (req, res) => app.render(req, res, "/verify", { token: req.token })
  50. );
  51. server.get("/:id", asyncHandler(links.redirect(app)));
  52. // Error handler
  53. server.use(helpers.error);
  54. // Handler everything else by Next.js
  55. server.get("*", (req, res) => handle(req, res));
  56. server.listen(port, err => {
  57. if (err) throw err;
  58. console.log(`> Ready on http://localhost:${port}`);
  59. });
  60. });