forked from denilsonjvv/RandomQuestions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
100 lines (97 loc) · 3.04 KB
/
app.js
File metadata and controls
100 lines (97 loc) · 3.04 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
// Mongodb session and core packages
const mongoose = require("mongoose"),
session = require("express-session"),
express = require("express"),
app = express();
//Utilities packages
const flash = require("connect-flash"),
cookieParser = require("cookie-parser"),
passport = require("passport"),
bodyParser = require("body-parser"),
methodOverride = require("method-override"),
User = require("./models/user"),
Project = require("./models/question"),
Updates = require("./models/updates"),
Topic = require("./models/topic"),
Seed = require("./seeds");
// Seed();
//MONGODB Connect
const MONGODB_URL = process.env.MONGODB_URL;
mongoose.connect(
MONGODB_URL,
{
useNewUrlParser: true,
useFindAndModify: false,
useUnifiedTopology: true,
},
function (err) {
if (err) {
console.log(err);
}
}
);
//Connect flash messages
app.use(flash());
app.use(cookieParser());
//use bodyparser
app.use(bodyParser.urlencoded({ extended: true }));
//allows express to track files as .ejs
app.set("view engine", "ejs");
//set core directory path
app.use(express.static(__dirname + "/public"));
// allows PUT and DELETE as a post request
app.use(methodOverride("_method"));
// Express session
app.use(
session({
secret: "The Questions",
resave: false,
saveUninitialized: true,
})
);
//Passport middleware
app.use(passport.initialize());
app.use(passport.session());
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
//Global vars
app.use(async function (req, res, next) {
//check req.user is valid- checks if user is logged in
try {
if (req.user) {
const project = await Project.find({ author: req.user._id });
res.locals.currentUserProjects = project;
}
const globalProjects = await Project.find({});
const globalUpdates = await Updates.find({ action: "created a question" })
.populate("question", "_id title")
.populate("author", "username profileImg");
res.locals.allProjects = globalProjects;
res.locals.globalUpdates = globalUpdates;
} catch (err) {
console.log(err.message);
}
res.locals.currentUser = req.user;
res.locals.success_msg = req.flash("success_msg");
res.locals.error_msg = req.flash("error_msg");
res.locals.info_msg = req.flash("info_msg");
res.locals.error = req.flash("error");
next();
});
//Require routes
const indexRoutes = require("./routes/index"),
homeRoutes = require("./routes/home"),
profileRoutes = require("./routes/profile"),
questionRoutes = require("./routes/question"),
topicRoutes = require("./routes/topic");
app.use("/user", indexRoutes);
app.use(homeRoutes);
app.use("/p", questionRoutes);
app.use("/profile", profileRoutes);
app.use("/topic", topicRoutes);
// Run app server
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server running with port ${port}`);
});