var mongoose = require('mongoose').set('debug', process.env.VITE_DEBUG); // Configurazione globale di Mongoose mongoose.Promise = global.Promise; mongoose.level = ""; mongoose.set('debug', false); mongoose.set('strictQuery', false); // Opzioni di connessione let options = { maxPoolSize: 5, // useNewUrlParser: true, // useUnifiedTopology: true, serverSelectionTimeoutMS: 20000, // Timeout di 30 secondi per la selezione del server }; // Controllo dell'autenticazione console.log('process.env.AUTH_MONGODB', process.env.AUTH_MONGODB); const username = encodeURIComponent(process.env.MONGODB_USER); const password = encodeURIComponent(process.env.MONGODB_PWD); if (process.env.AUTH_MONGODB === '1') { options.auth = { authSource: "admin", username, password }; } if (options.auth && options.auth.username) { console.log('MongoDb con Authenticazione:', options.auth.username, '******'); } else { console.log('### MongoDb SENZA Authenticazione !!! '); } // Stampa delle informazioni di sistema console.log('Node Version ' + process.version); console.log('Mongoose Version ' + mongoose.version); // URL di connessione const connectionUrl = process.env.MONGODB_URI; console.log('Connessione a ' + connectionUrl + ' in corso...'); // Funzione per connettersi al database con retry async function connectToDatabase(uri, opts) { let isConnected = false; while (!isConnected) { try { console.log("Sto provando a connettermi al database..."); await mongoose.connect(uri); console.log(' *** CONNESSIONE EFFETTUATA ! ' + uri + ' db: ' + process.env.DATABASE); console.log(' Database corrente:', mongoose.connection.name); // Ottieni l'URL completo della connessione console.log(' URL di connessione:', mongoose.connection.client.s.url); const db = mongoose.connection; const serverInfo = await db.db.admin().serverStatus(); // Ottieni lo stato del server console.log(` Versione di MongoDB: ${serverInfo.version}`); // Stampa la versione isConnected = true; // Imposta la flag di connessione a true } catch (error) { console.error(" Errore durante la connessione al database:", error.message); // if (error.name === 'MongooseServerSelectionError' || error.name === 'MongoServerError') { console.log(" Ritento la connessione tra 1 minuto..."); await new Promise((resolve) => setTimeout(resolve, 60000)); // Attendi 1 minuto prima di ritentare /*} else { console.error(" Errore irreversibile. Arresto il processo."); await new Promise((resolve) => setTimeout(resolve, 10000)); // Attendi 1 minuto prima di ritentare process.exit(1); // Termina il processo in caso di errore irreversibile }*/ } } } // Esporta Mongoose module.exports = { mongoose, connectToDatabase, connectionUrl, options };