-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
111 lines (95 loc) · 3.09 KB
/
server.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
require('dotenv').config();
// Vendor requirements
const express = require('express');
const morgan = require('morgan');
const mongoose = require('mongoose');
const session = require('express-session');
const flash = require('connect-flash');
const helmet = require('helmet'); // Security middleware
const cookieParser = require('cookie-parser');
const checkJWT = require('./middlewares/checkJWTMiddleware');
const authMiddleware = require('./middlewares/authMiddleware');
// Local requirements
const helpers = require('./helpers/helper');
const urlRoutes = require('./routes/urlRoutes');
const authRoutes = require('./routes/authRoutes');
const contactRoutes = require('./routes/contactRoutes');
const profileRoutes = require('./routes/profileRoutes');
const PORT = Number.parseInt(process.env.PORT) || 3000;
const app = express();
// Validate required environment variables
if (!process.env.DB_URI || !process.env.APP_SESSION_SECRET) {
console.error(
'Missing required environment variables: DB_URI, APP_SESSION_SECRET',
);
process.exit(1); // Exit the process with failure
}
app.use(session({
resave: false,
saveUninitialized: true,
secret: process.env.APP_SESSION_SECRET,
// cookie: {
// secure: true,
// maxAge: 60000,
// expires: new Date(Date.now() + 60000),
// },
}));
app.use(flash());
// Middlewares
app.set('view engine', 'ejs'); // Register view engine
app.use(express.static('public')); // Middleware & static files
app.use(morgan('dev')); // Register morgan as logger
app.use(express.json()); // Parse JSON bodies
app.use(express.urlencoded({ extended: true })); // Parse URL-encoded bodies
app.use(cookieParser()); // Parse cookies
if (process.env.NODE_ENV === 'production') {
app.use(helmet()); // Enhance security with helmet
}
app.locals.helpers = helpers;
// Connect to MongoDB
console.log('Connecting to MongoDB...');
mongoose.connect(process.env.DB_URI).then(() => {
console.log('Connected to MongoDB.');
// Listen to requests
app.listen(PORT, () => console.log(`Server is running on port ${PORT}.`));
}).catch(err => {
console.error(err);
process.exit(1); // Exit on connection error
});
// Here we are using the middleware to set the isGuest and userId
// properties on the request object.
app.use(checkJWT);
// Base routes
app.get('/', (req, res) => {
res.render('layout', {
content: 'index',
messages: req.flash('messageBag'),
isGuest: req.isGuest,
user: req.user,
});
});
app.use('/url', urlRoutes);
app.use('/auth', authRoutes);
app.use('/contact', contactRoutes);
app.use('/profile', profileRoutes);
app.get('/about', (req, res) => {
res.render('layout', {
content: 'about',
isGuest: req.isGuest,
user: req.user,
});
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ message: 'Something went wrong!' });
});
app.get('/terms-and-conditions', (req, res) => {
res.render('layout', {
content: 'terms_conditions',
isGuest: req.isGuest,
user: req.user,
});
});
// All routes below this middleware will require authentication
app.use(authMiddleware);