forked from Resilient-Labs/bet-on-me
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
128 lines (102 loc) · 3.36 KB
/
server.js
File metadata and controls
128 lines (102 loc) · 3.36 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const passport = require("passport");
const session = require("express-session");
const MongoStore = require("connect-mongo");
const methodOverride = require("method-override");
const flash = require("express-flash");
const logger = require("morgan");
const connectDB = require("./config/database");
const figlet = require("figlet");
const Goal = require("./models/Goal");
const Cluster = require("./models/Cluster");
// ROUTES
const mainRoutes = require("./routes/main");
const postRoutes = require("./routes/posts");
const taskRoutes = require("./routes/task");
const goalRoutes = require("./routes/goal");
const userRoutes = require("./routes/users");
const errorRoutes = require("./routes/error");
//Use .env file in config folder
require("dotenv").config({ path: "./config/.env" });
// passport config
require("./config/passport")(passport);
// connect to database
connectDB();
// using EJS for views
app.set("view engine", "ejs");
// static folder
app.use(express.static("public"));
// override before parsing
app.use(methodOverride("_method"));
// Stripe webhook route MUST come before body parsing!
//// this is because Stripe needs the raw request body to verify signatures
app.post(
"/stripe/webhook",
express.raw({ type: "application/json" }),
require("./controllers/stripe").handleWebhook
);
// body parsing middleware - comes AFTER webhook route
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// logging
app.use(logger("dev"));
// Sessions (stored in MongoDB)
app.use(
session({
secret: "keyboard cat",
resave: false,
saveUninitialized: false,
store: MongoStore.create({ mongoUrl: process.env.DB_STRING }),
})
);
// passport middleware
app.use(passport.initialize());
app.use(passport.session());
// use flash messages for errors, info, etc...
// Make user + goals available in all EJS templates so conditional can be made for header; user || !user for login/logout buttons in nav
app.use(async (req, res, next) => {
res.locals.user = req.user || null;
try {
const goal = await Goal.findOne({
user: req.user?.id,
}).lean();
res.locals.goal = goal;
const cluster = await Cluster.findOne({
cluster_members: req.user?.id,
}).lean();
res.locals.cluster = cluster;
} catch(err) {
console.log(err)
}
next();
});
app.use((req, res, next) => {
res.locals.currentpath = req.path
next()
});
//Make isInGroup available in all EJS files so conditional can be made for header; user && in group || !user && !isInGroup for Team Page/ User Goal in nav
const setUserGroupStatus = require("./middleware/setUserGroupStatus");
app.use(setUserGroupStatus);
//Use flash messages for errors, info, ect...
app.use(flash());
// Make figlet available in views
app.locals.figlet = figlet;
//Setup Routes For Which The Server Is Listening
app.use("/users", userRoutes);
app.use("/", mainRoutes);
app.use("/post", postRoutes);
app.use("/task", taskRoutes);
app.use("/goal", goalRoutes);
app.use("/stripe", require("./routes/stripe"));
// Manual 404 route (/404)
app.use(errorRoutes);
// global 404 handler must be last
app.use((req, res) => {
res.status(404).redirect("/404");
});
// Server
app.listen(process.env.PORT, () => {
console.log(`Server is running, you better catch it! localhost:${process.env.PORT}`);
});