fix(db,cover): robust database URL parsing and use axios in cover route
This commit is contained in:
1 parent
58bc11f1d7
commit
6ccaa0d653
2 files changed
+26
-12
No files matched your search
+22
-8
@@ -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);
|
||||
|
||||
|
||||
@@ -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' });
|
||||
}
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user