forked from blueprint-site/blueprint-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
73 lines (58 loc) · 1.96 KB
/
server.js
File metadata and controls
73 lines (58 loc) · 1.96 KB
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
// Import required packages
const express = require('express');
const helmet = require('helmet');
const cors = require('cors');
const morgan = require('morgan');
const compression = require('compression');
const csurf = require('csurf');
const dotenv = require('dotenv');
const session = require('express-session');
const passport = require('passport');
const { Strategy } = require('passport-local');
const expressRateLimit = require('express-rate-limit');
const path = require("path");
// Initialize dotenv to use .env file variables
dotenv.config();
// Create Express server
const server = express();
// Port setup
const PORT = process.env.PORT || 3000;
// Middleware
server.use(helmet()); // Sets various HTTP headers for security
server.use(cors()); // Enable CORS
server.use(morgan('dev')); // Logging middleware
server.use(compression()); // Compresses response bodies for improved performance
server.use(express.json()); // Parse JSON bodies
server.use(express.urlencoded({ extended: true })); // Parse URL-encoded bodies
// Session configuration
server.use(session({
secret: process.env.SESSION_SECRET || 'secret',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}));
// CSRF Protection
server.use(csurf( true));
// Rate Limiting
const limiter = expressRateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
});
server.use(limiter);
// Routes
const addonsRoutes = require('./routes/addons');
const schematicsRoutes = require('./routes/schematics');
server.use('/addons', addonsRoutes);
server.use('/schematics', schematicsRoutes);
server.use(express.static(path.join(__dirname, 'public')));
server.get('/', (req, res) => {
res.send('Hello, world!');
});
// Start server
server.listen(PORT, () => {
if (process.env.NODE_ENV === 'development'){
console.log(`Server running on http://localhost:${PORT}`);
}else{
console.log(`Server running on port ${PORT}`);
}
});