1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
import env from "./env";
import asyncHandler from "express-async-handler";
import cookieParser from "cookie-parser";
import passport from "passport";
import express from "express";
import helmet from "helmet";
import morgan from "morgan";
import nextApp from "next";
import * as Sentry from "@sentry/node";
import * as helpers from "./handlers/helpers";
import * as links from "./handlers/links";
import * as auth from "./handlers/auth";
import __v1Routes from "./__v1";
import routes from "./routes";
import { stream } from "./config/winston";
import "./cron";
import "./passport";
const port = env.PORT;
const app = nextApp({ dir: "./client", dev: env.isDev });
const handle = app.getRequestHandler();
app.prepare().then(async () => {
const server = express();
server.set("trust proxy", true);
if (env.isDev) {
server.use(morgan("combined", { stream }));
} else if (env.SENTRY_PRIVATE_DSN) {
Sentry.init({
dsn: env.SENTRY_PRIVATE_DSN,
environment: process.env.NODE_ENV
});
server.use(
Sentry.Handlers.requestHandler({
ip: true,
user: ["id", "email"]
})
);
}
server.use(helmet());
server.use(cookieParser());
server.use(express.json());
server.use(express.urlencoded({ extended: true }));
server.use(passport.initialize());
server.use(express.static("static"));
server.use(helpers.ip);
server.use(asyncHandler(links.redirectCustomDomain));
server.use("/api/v2", routes);
server.use("/api", __v1Routes);
server.get(
"/reset-password/:resetPasswordToken?",
asyncHandler(auth.resetPassword),
(req, res) => app.render(req, res, "/reset-password", { token: req.token })
);
server.get(
"/verify-email/:changeEmailToken",
asyncHandler(auth.changeEmail),
(req, res) => app.render(req, res, "/verify-email", { token: req.token })
);
server.get(
"/verify/:verificationToken?",
asyncHandler(auth.verify),
(req, res) => app.render(req, res, "/verify", { token: req.token })
);
server.get("/:id", asyncHandler(links.redirect(app)));
// Error handler
server.use(helpers.error);
// Handler everything else by Next.js
server.get("*", (req, res) => handle(req, res));
server.listen(port, err => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
|