← المستوى 4 – محترف البيانات

الدرس 5 من 6 ⏱ 55 دقيقة بريميوم

سجل زوار يدوم للأبد

أعد كتابة API ليعيش في SQLite. restart الخادم لن يمسح شيئاً.

ما نبنيه

نفس API من المستوى 3 – GET /api/vzkazy وPOST /api/vzkazy – لكن SQLite بدلاً من array. React تقريباً دون تغيير.

شاهد معي: خادم بقاعدة

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());

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

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

دورك الآن 💪

  1. استبدل array بالكود أعلاه.
  2. أرسل رسالتين من React.
  3. أوقف وأعد التشغيل – الرسائل يجب أن تبقى.
  4. commit وpush (بدون web.db).

تحقق: سجل الزوار يبقى بعد restart. SQL بـ ?.

ما ستخرج به من هذا الدرس