CodeBlanks Logo Icon CodeBlanks

fs ile kalıcılık

fs ile verileri dosyaya kaydedip yüklersin.

fs ile dosyaya kaydetme

Şimdi görevleri diske kaydedip geri yükleyeceğiz. Node.js'in fs modülü dosya işlemleri yapar. fs.writeFileSync(dosya, veri) veriyi dosyaya yazar; fs.readFileSync(dosya, "utf8") dosyayı dize olarak okur.

Görevleri kaydetmek için JSON.stringify(tasks, null, 2) ile diziyi dizeye çeviririz. null, 2 boşluklu biçimlendirme verir; dosya okunabilir olur. Geri yüklerken JSON.parse(raw) ile dizeyi nesneye çeviririz. readFileSync dosya yoksa hata fırlatır; bu yüzden try/catch içine alıp hata durumunda tasks = [] atarız. Böylece ilk çalıştırmada dosya yoksa uygulama çökmez.

try/catch ile güvenli okuma

loadTasks fonksiyonu try/catch kullanır. try bloğu içinde fs.readFileSync çağrılır; dosya yoksa hata fırlatır. catch bloğu hatayı yakalar ve tasks = [] atar.

Bu desen ilk çalıştırmada dosya henüz yoksa kritiktir. Hata yakalanmazsa uygulama çöker. catch (e) parametresi hata nesnesini alır; biz onu kullanmayız ama adı standart olarak e konur. Bu, hata yönetiminin temel desenidir: beklenen bir hatayı öngörüp güvenli bir varsayılanla devam etmek.

Uygulama saveTasks ve loadTasks fonksiyonlarını ekle

Önceki dersin çözümünü al (fs modülü içe aktarılmış halde). saveTasks() fonksiyonu ekle: fs.writeFileSync(DATA_FILE, JSON.stringify(tasks, null, 2)). loadTasks() fonksiyonu ekle: try/catch ile fs.readFileSync(DATA_FILE, "utf8") oku, JSON.parse(raw) ile tasks'a ata; hatada tasks = []. Son satırlar hazır: addTask("E-posta"); completeTask(1); saveTasks(); console.log("Kaydedildi");

Başlangıç kodu

index.js
const path = require("path");
const fs = require("fs");
const DATA_FILE = path.join("data", "tasks.json");
function createTask(id, title) {
  return { id: id, title: title, done: false };
}
let tasks = [];
tasks.push(createTask(1, "Alışveriş"));
function addTask(title) {
  const id = tasks.length + 1;
  tasks.push(createTask(id, title));
}
function completeTask(id) {
  const task = tasks.find(function(t) { return t.id === id; });
  if (task) { task.done = true; }
}
// saveTasks ve loadTasks fonksiyonlarını ekle
// buraya yaz

addTask("E-posta");
completeTask(1);
saveTasks();
console.log("Kaydedildi");

Örnek çözüm

index.js
const path = require("path");
const fs = require("fs");
const DATA_FILE = path.join("data", "tasks.json");
function createTask(id, title) {
  return { id: id, title: title, done: false };
}
let tasks = [];
tasks.push(createTask(1, "Alışveriş"));
function addTask(title) {
  const id = tasks.length + 1;
  tasks.push(createTask(id, title));
}
function completeTask(id) {
  const task = tasks.find(function(t) { return t.id === id; });
  if (task) { task.done = true; }
}
function saveTasks() {
  fs.writeFileSync(DATA_FILE, JSON.stringify(tasks, null, 2));
}
function loadTasks() {
  try {
    const raw = fs.readFileSync(DATA_FILE, "utf8");
    tasks = JSON.parse(raw);
  } catch (e) {
    tasks = [];
  }
}
addTask("E-posta");
completeTask(1);
saveTasks();
console.log("Kaydedildi");

Beklenen çıktı

Kaydedildi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi metod dosyaya senkron yazar?

index.js
fs.writeFileSync(DATA_FILE, data)
  • fs.readFile
  • fs.open
  • fs.appendFile
  • fs.writeFileSync Doğru cevap

Açıklama: writeFileSync dosyaya senkron yazar.

2 Parçayı rolüne eşle

Kavram Anlamı
fs.writeFileSync Diziyi dosyaya yazar
fs.readFileSync Dosyayı dize olarak okur
JSON.stringify Diziyi dizeye çevirir
JSON.parse Dizeyi diziye çevirir

3 saveTasks gövdesini tamamla

Soru
function saveTasks() {
  fs.____(DATA_FILE, JSON.stringify(tasks, null, 2));
}
Cevap
function saveTasks() {
  fs.writeFileSync(DATA_FILE, JSON.stringify(tasks, null, 2));
}

Açıklama: writeFileSync senkron yazar.

Başlangıç bölümündeki tüm dersler