Files
ENI-Angular/backend/server.js
2025-03-11 11:28:14 +01:00

82 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 na pas pu démarrer :', err.message);
console.log('⏳ Nouvelle tentative de démarrage dans 5 secondes... 🔄');
await new Promise((resolve) => setTimeout(resolve, 5000));
}
}
};
startServer();