diff --git a/server/db.js b/server/db.js index 2016f21..db24997 100644 --- a/server/db.js +++ b/server/db.js @@ -9,15 +9,29 @@ let isConnected = false; function getPool() { if (pool) return pool; - const config = process.env.DATABASE_URL - ? { connectionString: process.env.DATABASE_URL } - : { - host: process.env.DB_HOST || 'localhost', - port: parseInt(process.env.DB_PORT || '5432', 10), - user: process.env.DB_USER || 'postgres', - password: process.env.DB_PASSWORD || 'postgres', - database: process.env.DB_NAME || 'keyselector', + let config; + if (process.env.DATABASE_URL) { + const match = process.env.DATABASE_URL.match(/^postgres(?:ql)?:\/\/([^:]+):(.*)@([^:/]+)(?::(\d+))?\/(.+)$/); + if (match) { + config = { + user: match[1], + password: match[2], + host: match[3], + port: match[4] ? parseInt(match[4], 10) : 5432, + database: match[5] }; + } else { + config = { connectionString: process.env.DATABASE_URL }; + } + } else { + config = { + host: process.env.DB_HOST || 'localhost', + port: parseInt(process.env.DB_PORT || '5432', 10), + user: process.env.DB_USER || 'postgres', + password: process.env.DB_PASSWORD || 'postgres', + database: process.env.DB_NAME || 'keyselector', + }; + } pool = new Pool(config); diff --git a/server/routes/cover.js b/server/routes/cover.js index 632809b..7cacd63 100644 --- a/server/routes/cover.js +++ b/server/routes/cover.js @@ -1,5 +1,5 @@ const express = require('express'); -const fetch = require('node-fetch'); +const axios = require('axios'); const router = express.Router(); // Fetch cover from iTunes API to avoid frontend CORS issues @@ -9,8 +9,8 @@ router.get('/', async (req, res) => { try { const url = `https://itunes.apple.com/search?term=${encodeURIComponent(q)}&media=music&entity=song&limit=1`; - const response = await fetch(url); - const data = await response.json(); + const response = await axios.get(url, { timeout: 4000 }); + const data = response.data; if (data.results && data.results[0] && data.results[0].artworkUrl100) { const src = data.results[0].artworkUrl100.replace('100x100bb', '300x300bb'); @@ -19,7 +19,7 @@ router.get('/', async (req, res) => { res.json({ url: null }); } catch (err) { - console.error('iTunes cover fetch error', err); + console.error('iTunes cover fetch error', err.message); res.status(500).json({ error: 'Server error fetching cover' }); } });