-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
133 lines (108 loc) · 3.08 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
129
130
131
132
133
const express = require('express');
const path = require('path');
const csurf = require('csurf');
const flash = require('connect-flash');
const mongoose = require('mongoose');
const helmet = require('helmet');
const compression = require('compression');
const exphbs = require('express-handlebars');
const session = require('express-session');
const MongoStore = require('connect-mongodb-session')(session);
const homeRoutes = require('./routes/home');
const addRoutes = require('./routes/add');
const coursesRoutes = require('./routes/courses');
const cardRoutes = require('./routes/card');
const ordersRoutes = require('./routes/orders');
const authRoutes = require('./routes/auth');
const profileRoutes = require('./routes/profile');
const varMiddleware = require('./middleware/variables');
const userMiddleware = require('./middleware/user');
const errorHandler = require('./middleware/error');
const fileMiddleware = require('./middleware/file');
const keys = require('./keys');
const app = express();
const hbs = exphbs.create({
defaultLayout: 'main',
extname: 'hbs',
helpers: require('./utils/hbs-helpers')
});
// create session store
const store = new MongoStore({
collection: 'sessions',
uri: keys.MONGODB_URI,
});
//create engine 'hbs'
app.engine('hbs', hbs.engine);
//setup folder for hbs files
app.set(
'views',
path.join(__dirname, 'views')
);
//set engine as 'hbs' in server
app.set('view engine', 'hbs');
//set using public files
app.use(express.static(path.join(__dirname, 'public')));
app.use('/images', express.static(path.join(__dirname, 'images')));
//set buffer value encoding by form submit
app.use(express.urlencoded({ extended: true }));
//set session settings
app.use(session({
secret: keys.SESSION_SECRET,
resave: false,
saveUninitialized: false,
store
}));
//set file storage
app.use(fileMiddleware.single('avatar'));
//safety during http-headers
app.use(
helmet({
contentSecurityPolicy: {
directives: {
...helmet.contentSecurityPolicy.getDefaultDirectives(),
"img-src": ["'self'", "https:"],
"script-src-elem": [
"'self'",
"https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js",
"'unsafe-inline'",
],
},
},
})
);
//compress all response files
app.use(compression());
//set csurf safety package
app.use(csurf());
//set error reporter
app.use(flash());
// connecting local variables middleware
app.use(varMiddleware);
// attaching user with db-methods
app.use(userMiddleware);
//settled up routing
app.use('/', homeRoutes);
app.use('/add', addRoutes);
app.use('/courses', coursesRoutes);
app.use('/card', cardRoutes);
app.use('/orders', ordersRoutes);
app.use('/auth', authRoutes);
app.use("/profile", profileRoutes);
//settled up 404 error
app.use(errorHandler);
const PORT = process.env.PORT || 3000;
async function start() {
try {
mongoose.connect(keys.MONGODB_URI, {
useNewUrlParser: true,
});
app.listen(PORT, () => {
console.log(
`server is running on port ${PORT}`
);
});
} catch (e) {
console.log(e)
}
}
start()