// Importation des dépendances et des fichiers nécessaires const app = require('./app'); const logger = require('./utils/logger'); const database = require('./db/db-connect'); // Port par défaut ou port fourni par les variables d'environnement let port = process.env.PORT || 3000; // Fonction pour tenter de démarrer le serveur sur un port spécifique async function tryStartServerOnPort(port) { return new Promise((resolve, reject) => { // Tentative d'écoute sur le port const server = app.listen(port, () => { logger.log('info', `EasyTransport est lancé sur le port ${port}`); logger.log('info', `Vous pouvez accéder à EasyTransport en renseignant "localhost:${port}" dans un navigateur.`); resolve(); }) .on('error', (error) => { server.close(); reject(error); }); }); } // Fonction principale pour démarrer le serveur async function startServer() { // Tentative de connexion à la base de données try { await database.connect(); } catch (error) { logger.log('error', "Erreur lors de la connexion à la base de données", error); process.exit(1); } // Tentative de démarrage du serveur while (true) { try { await tryStartServerOnPort(port); break; } catch (error) { // Gestion d'erreur si le port est déjà en cours d'utilisation if (error.code === 'EADDRINUSE') { logger.log('warn', `Le port ${port} est déjà utilisé, tentative sur le port ${++port}.`); } else { logger.log('error', "Erreur lors du démarrage du serveur", error); process.exit(1); } } } } // Démarrage du serveur startServer().catch(error => { logger.log('error', "Erreur inattendue", error); process.exit(1); });