working version
This commit is contained in:
99
frontend/src/utils/axios.js
Normal file → Executable file
99
frontend/src/utils/axios.js
Normal file → Executable file
@@ -2,14 +2,51 @@ import axios from 'axios'
|
||||
import { useToast } from 'vue-toastification'
|
||||
import router from '@/router'
|
||||
|
||||
// Configuration de l'URL de base selon l'environnement
|
||||
const getBaseURL = () => {
|
||||
// Récupérer l'environnement depuis les variables Vite
|
||||
const environment = import.meta.env.VITE_ENVIRONMENT || 'local'
|
||||
|
||||
// Log de debug pour l'environnement
|
||||
console.log(`🌍 Frontend - Environnement détecté: ${environment}`)
|
||||
console.log(`🔗 API URL: ${import.meta.env.VITE_API_URL}`)
|
||||
console.log(`🔧 VITE_ENVIRONMENT: ${import.meta.env.VITE_ENVIRONMENT}`)
|
||||
console.log(`🔧 NODE_ENV: ${import.meta.env.NODE_ENV}`)
|
||||
|
||||
// Utiliser directement la variable d'environnement VITE_API_URL
|
||||
// qui est déjà configurée correctement pour chaque environnement
|
||||
const apiUrl = import.meta.env.VITE_API_URL
|
||||
|
||||
if (!apiUrl) {
|
||||
console.warn('⚠️ VITE_API_URL non définie, utilisation de la valeur par défaut')
|
||||
// Valeurs par défaut selon l'environnement
|
||||
switch (environment) {
|
||||
case 'production':
|
||||
return 'https://api.lediscord.com'
|
||||
case 'development':
|
||||
return 'https://api-dev.lediscord.com' // API externe HTTPS en développement
|
||||
case 'local':
|
||||
default:
|
||||
return 'http://localhost:8000'
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`🎯 URL finale utilisée: ${apiUrl}`)
|
||||
return apiUrl
|
||||
}
|
||||
|
||||
// Configuration de l'instance axios
|
||||
const instance = axios.create({
|
||||
baseURL: import.meta.env.VITE_API_URL || 'http://localhost:8000',
|
||||
baseURL: getBaseURL(),
|
||||
timeout: 30000,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
|
||||
// Log de la configuration
|
||||
console.log(`🚀 Axios configuré avec l'URL de base: ${getBaseURL()}`)
|
||||
|
||||
// Request interceptor
|
||||
instance.interceptors.request.use(
|
||||
config => {
|
||||
@@ -17,19 +54,41 @@ instance.interceptors.request.use(
|
||||
if (token) {
|
||||
config.headers.Authorization = `Bearer ${token}`
|
||||
}
|
||||
|
||||
// Log des requêtes en développement
|
||||
if (import.meta.env.DEV) {
|
||||
console.log(`📤 Requête ${config.method?.toUpperCase()} vers: ${config.url}`)
|
||||
}
|
||||
|
||||
return config
|
||||
},
|
||||
error => {
|
||||
console.error('❌ Erreur dans l\'intercepteur de requête:', error)
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
// Response interceptor
|
||||
instance.interceptors.response.use(
|
||||
response => response,
|
||||
response => {
|
||||
// Log des réponses en développement
|
||||
if (import.meta.env.DEV) {
|
||||
console.log(`📥 Réponse ${response.status} de: ${response.config.url}`)
|
||||
}
|
||||
return response
|
||||
},
|
||||
error => {
|
||||
const toast = useToast()
|
||||
|
||||
// Log détaillé des erreurs
|
||||
console.error('❌ Erreur API:', {
|
||||
status: error.response?.status,
|
||||
statusText: error.response?.statusText,
|
||||
url: error.config?.url,
|
||||
method: error.config?.method,
|
||||
data: error.response?.data
|
||||
})
|
||||
|
||||
if (error.response?.status === 401) {
|
||||
// Ne pas rediriger si on est déjà sur une page d'auth
|
||||
const currentRoute = router.currentRoute.value
|
||||
@@ -42,6 +101,10 @@ instance.interceptors.response.use(
|
||||
toast.error('Accès non autorisé')
|
||||
} else if (error.response?.status === 500) {
|
||||
toast.error('Erreur serveur, veuillez réessayer plus tard')
|
||||
} else if (error.code === 'ECONNABORTED') {
|
||||
toast.error('Délai d\'attente dépassé, veuillez réessayer')
|
||||
} else if (!error.response) {
|
||||
toast.error('Erreur de connexion, vérifiez votre connexion internet')
|
||||
}
|
||||
|
||||
return Promise.reject(error)
|
||||
@@ -56,7 +119,7 @@ export function getMediaUrl(path) {
|
||||
if (typeof path !== 'string') return path
|
||||
if (path.startsWith('http')) return path
|
||||
|
||||
const baseUrl = import.meta.env.VITE_API_URL || 'http://localhost:8000'
|
||||
const baseUrl = getBaseURL()
|
||||
|
||||
// Déjà un chemin uploads complet
|
||||
if (path.startsWith('/uploads/')) {
|
||||
@@ -71,3 +134,33 @@ export function getMediaUrl(path) {
|
||||
// Fallback
|
||||
return `${baseUrl}/uploads/${path}`
|
||||
}
|
||||
|
||||
// Fonction utilitaire pour obtenir l'environnement actuel
|
||||
export function getCurrentEnvironment() {
|
||||
return import.meta.env.VITE_ENVIRONMENT || 'local'
|
||||
}
|
||||
|
||||
// Fonction utilitaire pour vérifier si on est en production
|
||||
export function isProduction() {
|
||||
return getCurrentEnvironment() === 'production'
|
||||
}
|
||||
|
||||
// Fonction utilitaire pour vérifier si on est en développement
|
||||
export function isDevelopment() {
|
||||
return getCurrentEnvironment() === 'development'
|
||||
}
|
||||
|
||||
// Fonction utilitaire pour vérifier si on est en local
|
||||
export function isLocal() {
|
||||
return getCurrentEnvironment() === 'local'
|
||||
}
|
||||
|
||||
// Fonction utilitaire pour obtenir l'URL de l'API
|
||||
export function getApiUrl() {
|
||||
return import.meta.env.VITE_API_URL || getBaseURL()
|
||||
}
|
||||
|
||||
// Fonction utilitaire pour obtenir l'URL de l'application
|
||||
export function getAppUrl() {
|
||||
return import.meta.env.VITE_APP_URL || window.location.origin
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user