82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
import express from 'express';
|
||
import cors from 'cors';
|
||
import apiRoutes from './routes/apiRoutes.js';
|
||
import corsOptions from './config/cors.js'
|
||
import {apiKeyMiddleware} from './middleware/apiKeyMiddleware.js';
|
||
import dotenv from 'dotenv';
|
||
import cookieParser from 'cookie-parser';
|
||
import pool from "./config/db.js";
|
||
import * as path from "node:path";
|
||
import { fileURLToPath } from 'url';
|
||
|
||
const envFile = `.env`;
|
||
dotenv.config({ path: path.resolve(process.cwd(), envFile), override: true });
|
||
|
||
const app = express();
|
||
|
||
// Utiliser CORS
|
||
app.use(cors(corsOptions));
|
||
|
||
// Utilisation des cookies
|
||
app.use(cookieParser());
|
||
|
||
// Middleware pour parser les corps de requêtes JSON
|
||
app.use(express.json());
|
||
|
||
// Utilisation des fichiers/images
|
||
const __filename = fileURLToPath(import.meta.url);
|
||
const __dirname = path.dirname(__filename);
|
||
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
|
||
|
||
// Middleware pour vérifier la clé API (Authorization)
|
||
app.use('/', apiKeyMiddleware);
|
||
|
||
// Utiliser les routes API
|
||
app.use('/', apiRoutes);
|
||
|
||
// Middleware pour les routes non trouvées
|
||
app.use((req, res) => {
|
||
res.status(404).json({
|
||
message: 'Forbidden: Invalid Request',
|
||
status: false
|
||
});
|
||
});
|
||
|
||
// Test de conenxion à la base de donnée
|
||
const testDatabaseConnection = async () => {
|
||
let conn;
|
||
try {
|
||
conn = await pool.getConnection();
|
||
console.log('✅ Connexion à la base de données réussie ! 🎉');
|
||
} catch (err) {
|
||
console.error('❌ Erreur de connexion à la base de données :', err.message);
|
||
throw new Error('⛔ Impossible de se connecter à la base de données.');
|
||
} finally {
|
||
if (conn) await conn.end();
|
||
}
|
||
};
|
||
|
||
// Lancer le serveur
|
||
const startServer = async () => {
|
||
while (true) {
|
||
try {
|
||
console.log(`🚀 Lancement de l'API en cours... 🔧`);
|
||
await testDatabaseConnection();
|
||
app.listen(process.env.PORT, () => {
|
||
console.log(`📢 Chargement du fichier : ${envFile} 📄`);
|
||
console.log(`🚀 API démarrée sur le port ${process.env.PORT} 🎯`);
|
||
console.log(`🌍 Allowed Origin : ${process.env.ALLOWED_ORIGIN} 🔗`);
|
||
console.log(`✅ L'API est lancée et prête à l'emploi ! 🎉`);
|
||
});
|
||
break;
|
||
} catch (err) {
|
||
console.error('❌ Le serveur n’a pas pu démarrer :', err.message);
|
||
console.log('⏳ Nouvelle tentative de démarrage dans 5 secondes... 🔄');
|
||
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||
}
|
||
}
|
||
};
|
||
|
||
startServer();
|
||
|