← Niveau 4 – Data pro

Leçon 5 sur 6 ⏱ 55 minutes Premium

Un livre d'or qui dure pour toujours

Réécris l'API pour que les messages vivent dans SQLite. Un redémarrage du serveur n'effacera plus rien.

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 💪

  1. Remplace le tableau vzkazy dans server.js par le code ci-dessus (ou fais-le progressivement – GET d’abord, puis POST).
  2. Démarre le serveur et envoie 2 messages depuis React.
  3. Arrête le serveur, redémarre-le, actualise la page – les messages doivent rester.
  4. Commit les changements dans Git et push sur GitHub (sans web.db – il est dans .gitignore).
⚠️

Sur Render/Railway, le disque est parfois temporaireweb.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