diff --git a/nuxt.config.ts b/nuxt.config.ts index f1de904..36a473f 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,10 +1,5 @@ // https://nuxt.com/docs/api/configuration/nuxt-config import { defineNuxtConfig } from 'nuxt/config' -import { resolve, isAbsolute } from 'path' - -// Compute absolute music directory at build-time to avoid .output cwd issues in preview/prod -const musicDirEnv = process.env.MUSIC_DIR || './music' -const musicDirAbs = isAbsolute(musicDirEnv) ? musicDirEnv : resolve(process.cwd(), musicDirEnv) export default defineNuxtConfig({ // Helpers @@ -144,7 +139,6 @@ export default defineNuxtConfig({ // Runtime configuration runtimeConfig: { - musicDirAbs, public: { musicPath: process.env.NUXT_PUBLIC_MUSIC_PATH || '/music' } diff --git a/server/api/music/[filename].get.ts b/server/api/music/[filename].get.ts index 83b2ccd..7ceb62c 100644 --- a/server/api/music/[filename].get.ts +++ b/server/api/music/[filename].get.ts @@ -1,5 +1,5 @@ import { promises as fs } from 'fs' -import { join, resolve, sep } from 'path' +import { join, resolve, sep, isAbsolute } from 'path' import { createReadStream } from 'fs' export default defineEventHandler(async (event) => { @@ -30,9 +30,9 @@ export default defineEventHandler(async (event) => { // Determine the music directory path let musicDir: string - if (config.musicDirAbs || process.env.MUSIC_DIR) { - // Prefer absolute dir from runtimeConfig; fallback to env (resolved relative to repo root at build time) - musicDir = (config.musicDirAbs as string) || resolve(process.cwd(), process.env.MUSIC_DIR!) + if (process.env.MUSIC_DIR) { + // Resolve env to absolute + musicDir = isAbsolute(process.env.MUSIC_DIR) ? process.env.MUSIC_DIR : resolve(process.cwd(), process.env.MUSIC_DIR) } else { // Fallback to public/music const defaultPublicPath = config.public?.musicPath || '/music' diff --git a/server/api/music/index.get.ts b/server/api/music/index.get.ts index 5096130..d69e6f2 100644 --- a/server/api/music/index.get.ts +++ b/server/api/music/index.get.ts @@ -1,5 +1,5 @@ import { promises as fs } from 'fs' -import { join } from 'path' +import { join, resolve, isAbsolute } from 'path' export default defineEventHandler(async (event) => { try { @@ -9,10 +9,12 @@ export default defineEventHandler(async (event) => { console.log(`[MUSIC API] Music list request from ${realIP}`) const config = useRuntimeConfig() - // Prefer absolute dir computed at build time; fallback to env or public path const defaultPublicPath = config.public?.musicPath || '/music' const publicRel = defaultPublicPath.replace(/^\//, '') - const musicDir = config.musicDirAbs || process.env.MUSIC_DIR || join(process.cwd(), 'public', publicRel) + const envDir = process.env.MUSIC_DIR + const musicDir = envDir + ? (isAbsolute(envDir) ? envDir : resolve(process.cwd(), envDir)) + : join(process.cwd(), 'public', publicRel) // Check if music directory exists try {