const express = require('express'); const path = require('path'); const config = require('config'); const bodyParser = require('body-parser'); const session = require('express-session'); const flash = require('connect-flash'); const methodOverride = require('method-override'); const expressLayouts = require('express-ejs-layouts'); // Importation des modules personnalisés const mailServer = require('./mail-server'); const apiRoutes = require('./routes/api'); const webRoutes = require('./routes/web'); const database = require('./db/database'); // Initialisation de la base de données database.init(); // Création de l'application Express const app = express(); const port = config.get('server.port') || 3000; // Configuration des vues app.set('view engine', 'ejs'); app.set('views', path.join(__dirname, '../views')); app.use(expressLayouts); app.set('layout', 'layouts/main'); app.set('layout extractScripts', true); app.set('layout extractStyles', true); // Middleware app.use(express.static(path.join(__dirname, '../public'))); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(methodOverride('_method')); app.use(session({ secret: config.get('server.sessionSecret'), resave: false, saveUninitialized: false })); app.use(flash()); // Variables globales pour les templates app.use((req, res, next) => { res.locals.success_msg = req.flash('success_msg'); res.locals.error_msg = req.flash('error_msg'); res.locals.error = req.flash('error'); next(); }); // Routes app.use('/api', apiRoutes); app.use('/', webRoutes); // Démarrage du serveur HTTP app.listen(port, () => { console.log(`Serveur web démarré sur le port ${port}`); }); // Démarrage du serveur SMTP mailServer.start(); // Gestion des erreurs non capturées process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); }); process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); // En production, on pourrait vouloir redémarrer proprement le serveur ici // mais pour le développement, on laisse le processus se terminer if (process.env.NODE_ENV === 'production') { // Fermeture propre des serveurs mailServer.stop(); process.exit(1); } }); module.exports = app;