-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathindex.js
128 lines (109 loc) · 3.47 KB
/
index.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
const express = require('express')
const app = express()
const mongoose = require('mongoose')
const path = require('path')
const ejsMate = require('ejs-mate')
const session = require('express-session')
const flash = require('connect-flash')
const passport = require('passport')
const MongoStore = require('connect-mongo');
// importing all the routes
const authRouter = require('./routes/auth')
const restaurantRouter = require('./routes/restaurants')
const receiverRouter = require('./routes/receivers')
const methodOverride = require('method-override')
const User = require('./models/User')
const CatchAsync = require('./utils/CatchAsync')
const { sendMessage, sendMessageNodemailer } = require('./email')
const port = process.env.PORT || 3000;
mongoose.set('strictQuery', false);
let db_url = process.env.MONGODB_URL
mongoose.connect(db_url)
.then(() => {
console.log('CONNECTION SUCCESSFUL')
})
.catch(() => {
console.log('CONNECTION FAILED')
})
const sessionStore = MongoStore.create({
mongoUrl: db_url,
ttl: 1000 * 60 * 60 * 24
});
const sessionConfig = {
secret: 'thisisabadsecret',
resave: false,
saveUninitialized: false,
store: sessionStore,
cookie: {
maxAge: 1000 * 60 * 60 * 24
}
}
app.engine('ejs', ejsMate)
app.use(express.static('public'))
app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, 'views'))
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(methodOverride('_method'))
app.use(session(sessionConfig))
app.use(flash())
app.use(passport.initialize())
app.use(passport.session())
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser())
passport.deserializeUser(User.deserializeUser());
app.use((req, res, next) => {
res.locals.user = req.user || null
res.locals.role = req.user && req.user.role ? req.user.role : null;
res.locals.success = req.flash('success')
res.locals.error = req.flash('error')
next()
})
app.use((req, res, next) => {
const originalUrl = req.originalUrl
if (!originalUrl.startsWith('/auth/') || !originalUrl === '/') {
req.session.returnTo = req.originalUrl || '/'
}
next()
})
restaurantRouter.use(express.static(path.join(__dirname, 'public')))
authRouter.use(express.static(path.join(__dirname, 'public')))
receiverRouter.use(express.static(path.join(__dirname, 'public')))
app.get('/', async (req, res) => {
res.render('home')
})
app.get('/about', (req, res) => {
res.render('about')
})
app.get('/contacts', (req, res) => {
res.render('contacts')
})
app.post('/contacts', CatchAsync(async (req, res) => {
const { name, email, message } = req.body
await sendMessage(email, name, message)
.then(() => {
console.log('Send Successfully')
req.flash('success', 'Message has been delivered successfully')
res.redirect('/')
})
.catch((err) => {
console.log(err)
req.flash('error', 'Could not deliver message')
res.redirect('/contacts')
})
}))
app.use('/restaurants', restaurantRouter)
app.use('/receivers', receiverRouter)
app.use('/auth', authRouter)
app.get('*', (req, res) => {
res.render('error')
})
app.use((err, req, res, next) => {
const { statusCode = 500 } = err
if (!err.message) err.message = 'Oh No ! Something went wrong'
console.log(err)
res.status(statusCode).send(err)
})
app.listen(port, () => {
console.log('LISTENING ON PORT 3000')
})