-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
132 lines (113 loc) · 3.23 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
121
122
123
124
125
126
127
128
129
130
131
132
const dotenv = require('dotenv');
dotenv.config();
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const shopRoutes = require('./routes/shop.js');
const adminRoutes = require('./routes/admin.js');
const PORT = process.env.PORT || 4000;
const errorController = require('./controllers/error');
const User = require('./models/user');
const mongoose = require('mongoose');
const authRoute = require('./routes/auth.js');
const session = require('express-session');
const MongoSessionStore = require('connect-mongodb-session')(session);
const csrf = require('csurf');
const flash = require('connect-flash');
const multer = require('multer');
const shopController = require('./controllers/shop');
const isAuth = require('./middleware/is-auth');
// const MONGODB_URL =
// 'mongodb+srv://admin:[email protected]/express-online-shop?retryWrites=true&w=majority';
const MongoDBStore = new MongoSessionStore({
uri: process.env.MONGODB_URL,
collection: 'sessions',
});
const csrfProtection = csrf();
const fileStorage = multer.diskStorage({
destination: (req, file, callback) => {
callback(null, 'images');
},
filename: (req, file, callback) => {
callback(null, Date.now().toString() + '-' + file.originalname);
},
});
const fileFilter = (req, file, callback) => {
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'
) {
callback(null, true);
} else {
callback(null, false);
}
};
app.set('view engine', 'ejs');
app.set('views', 'views');
app.use(express.static('public'));
app.use('/images', express.static('images'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(
multer({ storage: fileStorage, fileFilter: fileFilter }).single('image')
);
app.use(
session({
secret: 'my-secret',
resave: false,
saveUninitialized: false,
store: MongoDBStore,
})
);
// csrf token generate
app.use(flash());
app.use((req, res, next) => {
res.locals.isAuthenticated = req.session.isLoggedIn;
next();
});
app.use((req, res, next) => {
if (!req.session.user) {
return next();
}
User.findById(req.session.user._id)
.then((user) => {
if (!user) {
next();
}
req.user = user;
next();
})
.catch((err) => {
next(new Error(err));
});
});
app.post('/create-order', isAuth, shopController.postOrder);
app.use(csrfProtection);
app.use((req, res, next) => {
res.locals.isAuthenticated = req.session.isLoggedIn;
res.locals.csrfToken = req.csrfToken();
next();
});
app.use('/admin', adminRoutes);
app.use(shopRoutes);
app.use(authRoute);
// error page
app.get('/500', errorController.get500);
app.use(errorController.get404);
app.use((error, req, res, next) => {
res.status(500).render('500', {
docTitle: 'Error!',
path: '/500',
isAuthenticated: req.session.isLoggedIn,
});
});
mongoose
.connect(process.env.MONGODB_URL)
.then((result) => {
app.listen(PORT, () => {
console.log(`server is running on port : ${PORT}`);
});
})
.catch((err) => {
console.log(err);
});