db.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. const mongoose = require('mongoose');
  2. // URL de connexion à la base de données
  3. const db = 'mongodb://database_preprod:27017/mean-fatboar-db';
  4. // Options de connexion améliorées
  5. const options = {
  6. useNewUrlParser: true,
  7. useUnifiedTopology: true,
  8. serverSelectionTimeoutMS: 5000, // Timeout avant échec de connexion
  9. socketTimeoutMS: 45000, // Ferme les sockets après 45 secondes d'inactivité
  10. keepAlive: true, // Garde la connexion active
  11. keepAliveInitialDelay: 300000, // Ping tous les 5 minutes (300000 ms)
  12. autoIndex: true, // Construit les index automatiquement
  13. retryWrites: true, // Réessaie les opérations d'écriture échouées
  14. // autoCreate: true, // Crée automatiquement la collection si elle n'existe pas
  15. };
  16. // Fonction initiale de connexion
  17. mongoose.connect(db, options)
  18. .then(() => {
  19. console.log("Successfully connected to the database.");
  20. // Créer une collection par défaut pour s'assurer que la base reste existante
  21. mongoose.connection.db.createCollection("app_status", function(err, res) {
  22. if (err) {
  23. console.log("Collection déjà existante, ignoré.");
  24. } else {
  25. console.log("Collection app_status créée pour maintenir la base de données active.");
  26. // Insérer un document pour s'assurer que la collection ne soit pas vide
  27. mongoose.connection.db.collection("app_status").updateOne(
  28. { name: "system_status" },
  29. { $set: { name: "system_status", lastChecked: new Date(), status: "active" } },
  30. { upsert: true }
  31. );
  32. }
  33. });
  34. })
  35. .catch(err => {
  36. console.log("Could not connect to the database.", err);
  37. });
  38. // Gestion des erreurs et reconnexion automatique
  39. mongoose.connection.on('error', (err) => {
  40. console.log('Mongoose connection error: ', err);
  41. });
  42. mongoose.connection.on('disconnected', () => {
  43. console.log('Mongoose connection disconnected');
  44. setTimeout(() => {
  45. mongoose.connect(db, options).catch(err => {
  46. console.log("Reconnection failed: ", err);
  47. });
  48. }, 5000); // Réessayer après 5 secondes
  49. });
  50. // Intercepter les signaux d'arrêt pour fermer proprement la connexion
  51. process.on('SIGINT', () => {
  52. mongoose.connection.close(() => {
  53. console.log('Mongoose connection closed due to app termination');
  54. process.exit(0);
  55. });
  56. });
  57. module.exports = mongoose.connection;
  58. // let min = 999999999;
  59. // let max = 10000000000;
  60. // for (i = 0; i < 50000; i++) {
  61. // let code = Math.floor(Math.random() * (max - min + 1)) + min;
  62. // const ticke = new Ticket({
  63. // code: code,
  64. // isUsed: false,
  65. // gains: "une entrée ou un dessert au choix",
  66. // date_used: new Date(),
  67. // index: 'index',
  68. // isServed: true
  69. // });
  70. // ticke.save();
  71. // }
  72. // const resto = new Restaurant({
  73. // "index": 5,
  74. // "name": "FatBoar 5",
  75. // "adress": "20 Rue Houdart, 95700 Roissy-en-France, France",
  76. // "longitude": 2.515081,
  77. // "latitude": 49.002317
  78. // });
  79. // resto.save();
  80. // const salt = bcrypt.genSaltSync(12);
  81. // password = bcrypt.hashSync('Pass@123', 12);
  82. // console.log('fgfg', password);
  83. // let date = new Date(1997, 1 , 12 , 20, 40);
  84. // const user = new User({
  85. // firstname: " adrien",
  86. // lastname: "xxxxxxx",
  87. // email: "adrien@hotmail.fr",
  88. // role: 'admin',
  89. // birthday: date,
  90. // phonenumber: '0680705876',
  91. // isActive: true,
  92. // password: password
  93. // });
  94. // user.save();