personnal/ecole/src copy/server.js

57 lines
1.7 KiB
JavaScript

// 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);
});