-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
125 lines (105 loc) · 2.88 KB
/
app.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
//external modules
const express = require('express');
const path = require('path');
const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);
const flash = require('connect-flash');
const multer = require('multer');
const csurf = require('csurf');
//internal files
const mongoConnect = require('./utils/database').mongoConnect;
const DB_URL = require('./utils/database').DB_URL;
const mainRouter = require('./routes/main');
const authRouter = require('./routes/auth');
const hotelRouter = require('./routes/hotel');
const User = require('./models/user');
const errorController = require('./controllers/error');
const csrfProtection = csurf();
//express app
const app = express();
//mongodb store for storing session on db
const store = new MongoDBStore({
uri:DB_URL,
collection:'sessions'
});
//file storage configuration
const fileStorage = multer.diskStorage({
destination:(req,file,cb)=>{
cb(null,'images');
},
filename:(req,file,cb)=>{
cb(null, Date.now() +'-'+ file.originalname);
}
});
//file type checking
const fileFilter = (req, file, cb) => {
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'
) {
cb(null, true);
} else {
cb(null, false);
}
};
//set views path and template engine
app.set('view engine','ejs');
app.set('views','views');
//set body parser
app.use(express.urlencoded({extended:false}));
//set middleware for extract files or binary data from requests
app.use(
multer({ storage:fileStorage,fileFilter:fileFilter }).single("image")
);
//set public files accessible to ejs
app.use(express.static(path.join(__dirname,'public')));
app.use('/images',express.static(path.join(__dirname,'images')));
//initialize session middleware
app.use(
session({
secret: "my secret",
resave: false,
saveUninitialized: false,
store: store,
})
);
//csrf protection middleware
app.use(csrfProtection);
//store flash messages accross requests
app.use(flash());
//set locals for ejs
app.use((req,res,next)=>{
res.locals.userLoggedIn = req.session.userLoggedIn;
res.locals.csrfToken = req.csrfToken();
next();
});
app.use((req,res,next)=>{
if(!req.session.user){
return next();
}
User.findById(req.session.user._id).then((user) => {
if(!user){
return next();
}
req.user = user;
res.locals.userType = user.userType;
next();
}).catch((err) => {
throw new Error(err);
});
});
//routes
app.use(mainRouter);
app.use(authRouter);
app.use(hotelRouter);
app.use('/500',errorController.get500);
app.use(errorController.get404);
// app.use((error,req,res,next)=>{
// res.redirect('/500');
// })
//getting connection to db
mongoConnect(()=>{
app.listen(3000);
console.log('Server running....');
});