diff --git a/pages/cms/vereinsmeisterschaften.vue b/pages/cms/vereinsmeisterschaften.vue index ecd0f4b..e11ad04 100644 --- a/pages/cms/vereinsmeisterschaften.vue +++ b/pages/cms/vereinsmeisterschaften.vue @@ -335,9 +335,9 @@ const formData = ref({ const loadResults = async () => { try { - // Cache-Busting: Füge Timestamp hinzu, um sicherzustellen, dass wir die neueste Version laden + // Verwende API-Endpoint statt statische Datei, um Cache-Probleme zu vermeiden const timestamp = new Date().getTime() - const response = await fetch(`/data/vereinsmeisterschaften.csv?t=${timestamp}`, { + const response = await fetch(`/api/vereinsmeisterschaften?t=${timestamp}`, { cache: 'no-cache', headers: { 'Cache-Control': 'no-cache' @@ -345,10 +345,10 @@ const loadResults = async () => { }) console.log('=== FRONTEND LOAD DEBUG ===') - console.log('Load URL:', `/data/vereinsmeisterschaften.csv?t=${timestamp}`) + console.log('Load URL:', `/api/vereinsmeisterschaften?t=${timestamp}`) console.log('Response Status:', response.status) - console.log('Response Headers - Last-Modified:', response.headers.get('last-modified')) - console.log('Response Headers - ETag:', response.headers.get('etag')) + console.log('Response Headers - Content-Type:', response.headers.get('content-type')) + console.log('Response Headers - Cache-Control:', response.headers.get('cache-control')) if (!response.ok) { console.error('Fehler beim Laden - Response nicht OK:', response.status) diff --git a/pages/vereinsmeisterschaften.vue b/pages/vereinsmeisterschaften.vue index b238453..aa7a636 100644 --- a/pages/vereinsmeisterschaften.vue +++ b/pages/vereinsmeisterschaften.vue @@ -159,7 +159,8 @@ const selectedYear = ref('alle') const loadResults = async () => { try { - const response = await fetch('/data/vereinsmeisterschaften.csv') + // Verwende API-Endpoint statt statische Datei, um Cache-Probleme zu vermeiden + const response = await fetch('/api/vereinsmeisterschaften') if (!response.ok) return const csv = await response.text() diff --git a/server/api/vereinsmeisterschaften.get.js b/server/api/vereinsmeisterschaften.get.js new file mode 100644 index 0000000..fc88827 --- /dev/null +++ b/server/api/vereinsmeisterschaften.get.js @@ -0,0 +1,40 @@ +import { promises as fs } from 'fs' +import path from 'path' + +export default defineEventHandler(async (event) => { + try { + const cwd = process.cwd() + + // In production (.output/server), working dir is .output + let csvPath + if (cwd.endsWith('.output')) { + csvPath = path.join(cwd, '../public/data/vereinsmeisterschaften.csv') + } else { + csvPath = path.join(cwd, 'public/data/vereinsmeisterschaften.csv') + } + + // CSV-Datei direkt als Text zurückgeben (keine Caching-Probleme) + const csv = await fs.readFile(csvPath, 'utf-8') + + // Setze Content-Type und Cache-Control Header + setHeader(event, 'Content-Type', 'text/csv; charset=utf-8') + setHeader(event, 'Cache-Control', 'no-cache, no-store, must-revalidate') + setHeader(event, 'Pragma', 'no-cache') + setHeader(event, 'Expires', '0') + + return csv + } catch (error) { + if (error.code === 'ENOENT') { + throw createError({ + statusCode: 404, + statusMessage: 'Vereinsmeisterschaften-Datei nicht gefunden' + }) + } + console.error('Fehler beim Laden der Vereinsmeisterschaften:', error) + throw createError({ + statusCode: 500, + statusMessage: 'Fehler beim Laden der Vereinsmeisterschaften' + }) + } +}) +