← Niveau 4 – Data pro

Les 5 van 6 ⏱ 55 minuten Premium

Een gastenboek dat voor altijd blijft

Herschrijf de API zodat berichten in SQLite leven. Een serverherstart wist niets meer weg.

Wat we bouwen

Dezelfde API als in Level 3 – GET /api/vzkazy en POST /api/vzkazy – maar in plaats van een array in geheugen lezen en schrijven we naar SQLite. De React-frontend kan bijna hetzelfde blijven.

Ik laat je zien: een server met database

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");
});

Ik laat je zien: de frontend

De React-component uit Level 3 werkt zonder wijzigingen – de server geeft dezelfde JSON terug, alleen met extra velden id en vytvoreno. Je kunt ze onder het bericht in klein grijs tonen.

Nu jij 💪

  1. Vervang de vzkazy-array in server.js door de code hierboven (of stap voor stap – eerst GET, dan POST).
  2. Start de server en stuur 2 berichten vanuit React.
  3. Stop de server, start opnieuw, ververs de pagina – de berichten moeten blijven.
  4. Commit de wijzigingen naar Git en push naar GitHub (zonder web.db – die staat in .gitignore).
⚠️

Op Render/Railway is de schijf soms tijdelijkweb.db kan na een redeploy verdwijnen. In productie gebruik je later een gehoste database (Render biedt gratis PostgreSQL). Voor leren en localhost is SQLite perfect.

Controle: Het gastenboek overleeft een herstart. Validatie gebeurt op de server. Je gebruikt geparametriseerde SQL.

Wat neem je mee uit deze les