-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
133 lines (117 loc) · 3.4 KB
/
server.js
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
129
130
131
132
133
const express = require("express");
const app = express();
const expressSession = require("express-session");
const path = require("path");
const mongoose = require("mongoose");
const enforce = require("express-sslify");
const cron = require("cron").CronJob;
const cors = require("cors");
const bodyParser = require("body-parser");
const passport = require("passport");
const localStrategy = require("passport-local");
//Models declarations
const Quiz = require("./models/quiz");
const Question = require("./models/question");
const User = require("./models/user");
//Routers
const indexRouter = require("./routes/index");
const quizRouter = require("./routes/quizzes");
const questionRouter = require("./routes/questions");
const sessionRouter = require("./routes/session");
const adminRouter = require("./routes/admin");
const authRouter = require("./routes/auth");
// Config declarations
const port = process.env.PORT || 5000;
const ip = process.env.IP;
const db = process.env.DATABASEURL || "mongodb://localhost/knowrona";
const seedDB = require("./config/seed");
const environment = process.env.NODE_ENV || "dev";
//Needed to make requests from front end to back end.
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
//mongoose connection
mongoose
.connect(db, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
})
.then(() => {
console.log("connected to: " + db);
})
.catch((err) => {
console.log(err.message);
});
//Passport Configuration
app.use(
expressSession({
secret: "try another username",
resave: false,
saveUninitialized: false,
})
);
app.use(passport.initialize());
app.use(passport.session());
passport.use(new localStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use((req, res, next) => {
res.locals.currentUser = req.user;
next();
});
// Special for Dev Environment
if (environment == "dev") {
require("dotenv").config();
// Simulate loading
const slowness = process.env.SLOWNESS || 0;
let loadTime = slowness * 1000 * Math.random();
app.use((req, res, next) => {
setTimeout(() => {
loadTime = slowness * 1000 * Math.random();
console.log("loaded");
next();
}, loadTime);
});
app.get("/", (req, res) => {
res.send("This page shows in dev mode only");
});
}
// Creating routes
app.use(indexRouter);
app.use("/quizzes", quizRouter);
app.use("/questions", questionRouter);
app.use("/session", sessionRouter);
app.use("/admin", adminRouter);
app.use("/auth", authRouter);
// Regular DB clearance in Staging
if (environment == "staging") {
var job = new cron(
"0 0 20 * * *",
function () {
Quiz.deleteMany({}, (err, deletedQuizes) => {
if (err) console.log(err);
console.log("Scheduled deletion of quizzes");
});
},
null,
true,
"America/Los_Angeles"
);
job.start();
}
// Calling the seed function
seedDB();
// Redirect to React in non Dev environment
if (environment !== "dev") {
app.use(enforce.HTTPS({ trustProtoHeader: true }));
app.use(express.static(path.join("client", "build")));
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});
}
// Listening to the server
app.listen(port, ip, () => {
console.log("Server running on port", port);
});