Ce qu’on construit
La même API qu’au Niveau 3 – GET /api/vzkazy et POST /api/vzkazy – mais au lieu d’un tableau en mémoire, on lit et écrit dans SQLite. Le frontend React peut rester presque exactement pareil.
Montre-moi : un serveur avec une base de données
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");
});
Montre-moi : le frontend
Le composant React du Niveau 3 fonctionne sans changement – le serveur retourne le même JSON, juste avec des champs id et vytvoreno en plus. Tu peux les afficher sous le message en petit texte gris.
À toi 💪
- Remplace le tableau
vzkazydansserver.jspar le code ci-dessus (ou fais-le progressivement – GET d’abord, puis POST). - Démarre le serveur et envoie 2 messages depuis React.
- Arrête le serveur, redémarre-le, actualise la page – les messages doivent rester.
- Commit les changements dans Git et push sur GitHub (sans
web.db– il est dans.gitignore).
Sur Render/Railway, le disque est parfois temporaire – web.db peut être supprimé après un redéploiement. En production, utilise plus tard une base de données hébergée (Render offre PostgreSQL gratuit). Pour apprendre et localhost, SQLite est parfait.
Vérifie : Le livre d’or survit à un redémarrage. La validation se fait côté serveur. Tu utilises du SQL paramétré.
Ce que tu retiens de cette leçon
- API + SQLite = données permanentes.
prepare+?pour des INSERT sécurisés.web.dbn’a pas sa place dans Git ; utilise PostgreSQL dans le cloud plus tard.
© 2026 Ing. Martin Polak / AlgoRhino · Conditions d'utilisation du contenu