forked from wdi-sg/project-2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
157 lines (129 loc) · 4.05 KB
/
index.js
File metadata and controls
157 lines (129 loc) · 4.05 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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
require('dotenv').config({ silent: true })
// Heroku check
const dbUrl =
process.env.NODE_ENV === 'production' ? process.env.MLAB_URI : 'mongodb://localhost/itinerary'
const port = process.env.PORT || 7000 // this is for our express server
// installing all modules
const express = require('express')
const mongoose = require('mongoose') // for DB
const path = require('path') // for Public files
const exphbs = require('express-handlebars') // for Handlebars
const bodyParser = require('body-parser') // for accessing POST request
const methodOverride = require('method-override') // for accessing PUT / DELETE
// UPDATE 23 Oct
const session = require('express-session') // to create session and cookies
const MongoStore = require('connect-mongo')(session) // to store session into db
const passport = require('./config/ppConfig') // to register passport strategies
const { hasLoggedOut, isLoggedIn } = require('./helpers')
// Models
const User = require('./models/user')
const Travelplan = require('./models/travel')
// require all my route files
const register_routes = require('./routes/register_routes')
const login_routes = require('./routes/login_routes')
const travelplan_routes = require('./routes/travelplan_routes')
const app = express()
// VIEW ENGINES aka handlebars setup
app.engine('handlebars', exphbs({ defaultLayout: 'main'}))
app.set('view engine', 'handlebars')
// MIDDLEWARES
app.use(express.static(path.join(__dirname, 'public')))
app.use(function (req, res, next) {
console.log('Method: ' + req.method + ' Path: ' + req.url)
next()
})
// setup bodyParser
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))
// setup methodOverride
app.use(methodOverride('_method'))
// connecting to mongodb before we starting the server
mongoose.Promise = global.Promise
mongoose.connect(dbUrl, {
useMongoClient: true
})
.then(
() => { console.log('db is connected') },
(err) => { console.log(err) }
)
// MUST BE AFTER YOUR `mongoose.connect`
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
// store this to our db too
store: new MongoStore({ mongooseConnection: mongoose.connection })
}))
// PASSPORT ACTIVATED
app.use(passport.initialize())
app.use(passport.session())
app.use((req, res, next) => {
app.locals.user = req.user // we'll only `req.user` if we managed to log in
next()
})
// NEW ROUTE - HOMEPAGE
app.get('/', (req, res) => {
res.render('home')
})
// NEW ROUTE - LOGOUT
app.get('/logout', hasLoggedOut, (req, res) => {
req.logout()
res.redirect('/')
})
app.get('/routes', (req, res) => {
// the return of then
Travelplan.find({'postby':req.user.id}).limit(20).sort({dateCreated: -1})
.then(travelplans => {
// at this point we got our data so we can render our page
res.render('trips/routes', {
travelplans
})
})
.catch(err => {
console.log(err)
})
})
app.delete('/deleteroute', (req, res) => {
var restoId = req.body.routeId
Travelplan.findByIdAndRemove(routeId)
.then(() => {
res.send({message: 'REMOVE'})
})
})
// NEW ROUTE - SEARCH - for realtime search of our restaurant db
app.get('/destination', (req, res) => {
Travelplan.find()
.then(travelplans => {
Travelplan.distinct('category')
.then(categories => {
res.render('users/search', {travelplans, categories})
})
})
})
app.post('/search', (req, res) => {
const keyword = req.body.keyword
const regex = new RegExp(keyword, 'i')
Travelplan.find({
category: regex
})
.limit(20)
.then(travelplans => res.send(travelplans))
.catch(err => res.send(err)) // in case we have an error
})
// NEW ROUTE - REGISTER
app.use('/routes', hasLoggedOut, travelplan_routes)
app.use('/register', isLoggedIn, register_routes)
app.use('/login', isLoggedIn, login_routes)
// NEW ROUTE - PROFILE - to show the user profile page
app.get('/profile', hasLoggedOut, (req, res) => {
res.send(req.user)
})
app.locals = {
GOOGLE_MAPS_URL: process.env.GOOGLE_MAPS_URL
}
// opening the port for express
app.listen(port, () => {
console.log(`Server is running on ${port}`)
})