← Level 4 – Data pro

Lektion 5 von 6 ⏱ 55 Minuten Premium

Ein Gästebuch, das für immer hält

Schreibe die API um, damit Nachrichten in SQLite leben. Ein Server-Neustart löscht nichts mehr.

Was wir bauen

Die gleiche API wie in Level 3 – GET /api/vzkazy und POST /api/vzkazy – aber statt eines Arrays im Speicher lesen und schreiben wir in SQLite. Das React-Frontend kann fast genau gleich bleiben.

Zeig mir das: ein Server mit Datenbank

const express = require("express");
const cors = require("cors");
const Database = require("better-sqlite3");

const aplikace = express();
const db = new Database("web.db");

db.exec(`
  CREATE TABLE IF NOT EXISTS vzkazy (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    jmeno TEXT NOT NULL,
    text TEXT NOT NULL,
    vytvoreno TEXT DEFAULT CURRENT_TIMESTAMP
  )
`);

aplikace.use(cors());
aplikace.use(express.json());

// GET – all messages from the database
aplikace.get("/api/vzkazy", (pozadavek, odpoved) => {
  const radky = db.prepare(
    "SELECT id, jmeno, text, vytvoreno FROM vzkazy ORDER BY id DESC"
  ).all();
  odpoved.json(radky);
});

// POST – a new message into the database
aplikace.post("/api/vzkazy", (pozadavek, odpoved) => {
  const { jmeno, text } = pozadavek.body;

  if (!jmeno || !text || jmeno.length > 50 || text.length > 500) {
    return odpoved.status(400).json({ chyba: "Invalid message." });
  }

  const vloz = db.prepare("INSERT INTO vzkazy (jmeno, text) VALUES (?, ?)");
  const vysledek = vloz.run(jmeno, text);

  odpoved.json({ ulozeno: true, id: vysledek.lastInsertRowid });
});

aplikace.listen(3900, () => {
  console.log("Server running at http://localhost:3900");
});

Zeig mir das: das Frontend

Die React-Komponente aus Level 3 funktioniert ohne Änderungen – der Server liefert das gleiche JSON, nur mit extra id- und vytvoreno-Feldern. Du kannst sie unter der Nachricht in kleinem grauen Text anzeigen.

Jetzt du 💪

  1. Ersetze das vzkazy-Array in server.js durch den Code oben (oder mach es schrittweise – zuerst GET, dann POST).
  2. Starte den Server und sende 2 Nachrichten aus React.
  3. Stoppe den Server, starte ihn neu, aktualisiere die Seite – die Nachrichten müssen bleiben.
  4. Committe die Änderungen in Git und pushe zu GitHub (ohne web.db – es ist in .gitignore).
⚠️

Auf Render/Railway ist die Festplatte manchmal temporärweb.db kann nach einem Redeploy gelöscht werden. In der Produktion nutze später eine gehostete Datenbank (Render bietet kostenloses PostgreSQL). Zum Lernen und für localhost ist SQLite perfekt.

Kontrolliere dich selbst: Das Gästebuch überlebt einen Neustart. Die Validierung passiert auf dem Server. Du nutzt parametrisiertes SQL.

Das nimmst du aus dieser Lektion mit