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 { db, initDatabase } from './config/database.js';
|
||||||
import fastifyStatic from '@fastify/static';
|
import fastifyStatic from '@fastify/static';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
// Import routes
|
// Import routes
|
||||||
import authRoute from './routes/auth.js';
|
import authRoute from './routes/auth.js';
|
||||||
@@ -79,12 +80,25 @@ fastify.register(multipart, {
|
|||||||
|
|
||||||
// Serve static files (uploaded images, etc.) from persistent volume
|
// Serve static files (uploaded images, etc.) from persistent volume
|
||||||
const dataDir = env.GIT_WORKSPACE_DIR || path.join(process.cwd(), 'data');
|
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, {
|
fastify.register(fastifyStatic, {
|
||||||
root: dataDir,
|
root: dataDir,
|
||||||
prefix: '/static/',
|
prefix: '/static/',
|
||||||
decorateReply: false
|
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
|
// Decorate fastify with authenticate method
|
||||||
fastify.decorate('authenticate', authenticate);
|
fastify.decorate('authenticate', authenticate);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user