Vad vi bygger
Samma API som på nivå 3 – GET /api/vzkazy och POST /api/vzkazy – men i stället för en array i minnet läser och skriver vi till SQLite. React-frontenden kan vara nästan exakt densamma.
Jag visar: en server med databas
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");
});
Jag visar: frontend
React-komponenten från nivå 3 funkar utan ändringar – servern returnerar samma JSON, bara med extra fält id och vytvoreno. Du kan visa dem under meddelandet i liten grå text.
Nu är det din tur 💪
- Ersätt
vzkazy-arrayen iserver.jsmed koden ovan (eller gör det steg för steg – GET först, sedan POST). - Starta servern och skicka 2 meddelanden från React.
- Stoppa servern, starta den igen, uppdatera sidan – meddelandena måste finnas kvar.
- Commita ändringarna till Git och pusha till GitHub (utan
web.db– den är i.gitignore).
På Render/Railway är disken ibland tillfällig – web.db kan raderas efter en omdeploy. I produktion, använd en hostad databas senare (Render erbjuder gratis PostgreSQL). För lärande och localhost är SQLite perfekt.
Kolla: Gästboken överlever en omstart. Validering sker på servern. Du använder parametriserad SQL.
Det här tar du med dig från lektionen
- API + SQLite = permanent data.
prepare+?för säkra INSERTs.web.dbhör inte hemma i Git; använd PostgreSQL i molnet senare.
© 2026 Ing. Martin Polak / AlgoRhino · Villkor för innehållsanvändning