require('dotenv').config(); const express = require('express'); const mongoose = require('mongoose'); const cors = require('cors'); const helmet = require('helmet'); const rateLimit = require('express-rate-limit'); const morgan = require('morgan'); const cookieParser = require('cookie-parser'); const app = express(); // Database connection mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => console.log('Connected to MongoDB')) .catch(err => console.error('MongoDB connection error:', err)); // Middleware app.use(cors({ origin: process.env.CLIENT_URL, credentials: true })); app.use(helmet()); app.use(express.json()); app.use(cookieParser()); app.use(morgan('dev')); // Rate limiting const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 minutes max: 100 // limit each IP to 100 requests per windowMs }); app.use(limiter); // Routes const authRoutes = require('./routes/auth'); const userRoutes = require('./routes/users'); const courseRoutes = require('./routes/courses'); const enrollmentRoutes = require('./routes/enrollments'); const certificateRoutes = require('./routes/certificates'); const paymentRoutes = require('./routes/payments'); app.use('/api/auth', authRoutes); app.use('/api/users', userRoutes); app.use('/api/courses', courseRoutes); app.use('/api/enrollments', enrollmentRoutes); app.use('/api/certificates', certificateRoutes); app.use('/api/payments', paymentRoutes); // Error handling app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ message: 'Internal Server Error' }); }); const PORT = process.env.PORT || 5000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });