Node.js/Express-Server als Ersatz für Cloudflare Pages Functions + D1 (läuft auf eigenem Server statt Cloudflare)
Build & Deploy / deploy (push) Waiting to run

This commit is contained in:
qcigano
2026-08-05 15:06:17 +02:00
parent 53e7bb158a
commit b8b8ec7b7a
19 changed files with 1322 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
/* =====================================================================
db.js — SQLite-Datenbank (better-sqlite3), Ersatz für Cloudflare D1.
D1 ist selbst schon SQLite unter der Haube — deshalb funktioniert das bestehende Schema
(../d1/schema.sql) unverändert. WICHTIG: ../d1/schema.sql ist bereits der KONSOLIDIERTE
Endzustand (enthält gutschein_code, paypal_order_id, customers-Tabelle direkt) — die
migration-*.sql-Dateien daneben waren einmalige ALTER-TABLE-Schritte für die SCHON LAUFENDE
alte D1-Datenbank und dürfen auf einer frischen Datenbank NICHT nochmal ausgeführt werden
(migration-0002 würde z.B. mit "duplicate column name" fehlschlagen, weil schema.sql die
Spalte schon enthält). Deshalb hier bewusst NUR schema.sql. Echte, bestehende Bestelldaten aus
der alten D1-Datenbank werden separat importiert (siehe import-d1-daten.js), nicht über die
Migrationsdateien.
Der Datenbank-Ordner liegt außerhalb des Programmcodes (siehe DB_PATH), damit ein Update des
Servers (z.B. "git pull") niemals die echten Bestelldaten anfassen kann.
===================================================================== */
import Database from "better-sqlite3";
import { readFileSync, existsSync, mkdirSync } from "node:fs";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url));
// Überschreibbar über die Umgebungsvariable DB_PATH (siehe .env) — Standard: eigener,
// vom Programmcode getrennter Datenordner.
const DB_PATH = process.env.DB_PATH || "/var/lib/vandiy-shop/vandiy-shop.db";
const D1_ORDNER = join(__dirname, "..", "d1");
mkdirSync(dirname(DB_PATH), { recursive: true });
export const db = new Database(DB_PATH);
db.pragma("journal_mode = WAL"); // bessere Nebenläufigkeit bei gleichzeitigen Lese-/Schreibzugriffen
db.pragma("foreign_keys = ON");
function fuehreSqlDateiAus(pfad) {
if (!existsSync(pfad)) return;
const sql = readFileSync(pfad, "utf-8");
db.exec(sql);
}
export function initDb() {
fuehreSqlDateiAus(join(D1_ORDNER, "schema.sql"));
}