const nodemailer = require('nodemailer'); const express = require('express'); const path = require('path'); const { Pool } = require('pg'); const rateLimit = require('express-rate-limit'); require('dotenv').config(); const app = express(); const port = process.env.SERVER_PORT || 3000; // Middleware to parse incoming JSON data from the frontend app.use(express.json()); // Middleware to serve static files (like index.html, styles.css, script.js) const STATIC_DIR = process.env.STATIC_DIR || 'public' app.use(express.static(path.join(__dirname, STATIC_DIR))); // Database connection pool setup using environment variables for security const pool = new Pool({ user: process.env.DB_USER, host: process.env.DB_HOST, database: process.env.DB_DATABASE, password: process.env.DB_PASSWORD, port: process.env.DB_PORT, }); // Nodemailer transporter setup for sending emails const transporter = nodemailer.createTransport({ host: process.env.EMAIL_HOST, port: process.env.EMAIL_PORT, secure: false, requireTLS: true, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, }); const contactController = require('./controllers/contactController')(pool, transporter); // Import the security middleware const securityMw = require('./middleware/securityMw'); // Import contactRoutes and contactController, and pass in securityMw const contactRoutes = require('./routes/contactRoutes')(contactController, securityMw); // Use contactRoutes to connect the modular router to the main app app.use(contactRoutes); // Start the server app.listen(port, () => { console.log(`Server listening at http://localhost:${port}`); });