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
Build & Deploy / deploy (push) Waiting to run
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
Reference in New Issue
Block a user