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 💪
- Ersetze das
vzkazy-Array inserver.jsdurch den Code oben (oder mach es schrittweise – zuerst GET, dann POST). - Starte den Server und sende 2 Nachrichten aus React.
- Stoppe den Server, starte ihn neu, aktualisiere die Seite – die Nachrichten müssen bleiben.
- Committe die Änderungen in Git und pushe zu GitHub (ohne
web.db– es ist in.gitignore).
Auf Render/Railway ist die Festplatte manchmal temporär – web.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
- API + SQLite = dauerhafte Daten.
prepare+?für sichere INSERTs.web.dbgehört nicht in Git; nutze später PostgreSQL in der Cloud.
© 2026 Ing. Martin Polak / AlgoRhino · Nutzungsbedingungen für Inhalte