fix(backend): Bilder unter /images/ ausliefern
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
Die Bild-URLs in der DB sind /images/events/... bzw. /images/gallery/... - das ist der Pfad auf der publizierten Astro-Seite. Das Backend lieferte die Dateien aber nur unter /static/ mit Root auf dem Workspace aus, die Datei lag also unter /static/public/images/... Ein Aufruf von /images/... traf auf gar keine Route, kam als JSON-404 zurueck und wurde vom Browser als OpaqueResponseBlocking verworfen. Dadurch waren im Adminbereich saemtliche Event- und Gallery-Bilder kaputt. Zusaetzlicher statischer Mount /images/ -> <workspace>/public/images. Die DB bleibt unveraendert und die URLs stimmen weiterhin fuer die publizierte Seite. /static/ bleibt zusaetzlich bestehen. Beide Verzeichnisse werden vorab angelegt - @fastify/static verweigert sonst die Registrierung, wenn der Workspace noch nicht geklont ist. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
@@ -8,6 +8,7 @@ import { env, validateEnv } from './config/env.js';
|
||||
import { db, initDatabase } from './config/database.js';
|
||||
import fastifyStatic from '@fastify/static';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
|
||||
// Import routes
|
||||
import authRoute from './routes/auth.js';
|
||||
@@ -79,12 +80,25 @@ fastify.register(multipart, {
|
||||
|
||||
// Serve static files (uploaded images, etc.) from persistent volume
|
||||
const dataDir = env.GIT_WORKSPACE_DIR || path.join(process.cwd(), 'data');
|
||||
// Muss existieren, sonst verweigert @fastify/static die Registrierung
|
||||
fs.mkdirSync(dataDir, { recursive: true });
|
||||
fastify.register(fastifyStatic, {
|
||||
root: dataDir,
|
||||
prefix: '/static/',
|
||||
decorateReply: false
|
||||
});
|
||||
|
||||
// Uploads liegen unter <workspace>/public/images. In der DB stehen sie als
|
||||
// /images/... - das ist die URL auf der publizierten Astro-Seite. Damit die
|
||||
// Admin-Oberflaeche dieselben Pfade verwenden kann, hier ebenso ausliefern.
|
||||
const imagesDir = path.join(dataDir, 'public', 'images');
|
||||
fs.mkdirSync(imagesDir, { recursive: true });
|
||||
fastify.register(fastifyStatic, {
|
||||
root: imagesDir,
|
||||
prefix: '/images/',
|
||||
decorateReply: false
|
||||
});
|
||||
|
||||
// Decorate fastify with authenticate method
|
||||
fastify.decorate('authenticate', authenticate);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user