From e89393b4f3b70acc16888ce06c39866fadf3c509 Mon Sep 17 00:00:00 2001 From: Serverlele30 <46974281+Serverlele30@users.noreply.github.com> Date: Thu, 23 Jul 2026 09:58:58 +0200 Subject: [PATCH] Add files via upload --- lib/db.js | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/db.js b/lib/db.js index 5ef3a3d..9ff524d 100644 --- a/lib/db.js +++ b/lib/db.js @@ -2,13 +2,48 @@ import { neon } from '@neondatabase/serverless'; import { randomBytes, scryptSync, timingSafeEqual } from 'node:crypto'; -export const sql = neon(process.env.DATABASE_URL); - export const ONLINE_SECS = 60; export const MAX_TEXT_LEN = 500; export const MAX_POLL = 50; export const PREVIEW_LEN = 38; +/* ---------------- Datenbank-Verbindung (verzögert aufgebaut) ---------------- + * Wichtig: NICHT beim Import verbinden. Fehlt die Umgebungsvariable, würde + * neon() sofort werfen und die Function stürzt ab, bevor irgendein try/catch + * greift (Vercel zeigt dann nur FUNCTION_INVOCATION_FAILED). So bekommen wir + * stattdessen eine lesbare ERR|-Zeile. + */ +let _sql = null; + +function getSql() { + if (_sql) return _sql; + + // Je nach Integration heißt die Variable unterschiedlich. + const url = + process.env.DATABASE_URL || + process.env.POSTGRES_URL || + process.env.POSTGRES_PRISMA_URL || + process.env.DATABASE_URL_UNPOOLED || + process.env.POSTGRES_URL_NON_POOLING; + + if (!url) { + const found = Object.keys(process.env) + .filter(k => /POSTGRES|DATABASE|NEON/i.test(k)) + .join(', ') || 'keine'; + throw new Error( + `Keine Datenbank-URL gefunden. Gefundene passende Variablen: ${found}. ` + + `Im Vercel-Dashboard unter Storage eine Neon-Datenbank verbinden und neu deployen.` + ); + } + _sql = neon(url); + return _sql; +} + +/** Als Tagged Template nutzbar: sql`SELECT ...` */ +export function sql(strings, ...values) { + return getSql()(strings, ...values); +} + /* ---------------- Antwort-Protokoll (zeilenbasiert, Pipe-getrennt) ---------------- */ export function textHead(res) { @@ -37,7 +72,6 @@ export function param(req, key) { let v = req.query?.[key]; if (v === undefined && req.body) { if (typeof req.body === 'string') { - // Fallback, falls Vercel den Body nicht geparst hat v = new URLSearchParams(req.body).get(key); } else { v = req.body[key];