CodeBlanks Logo Icon CodeBlanks

fs kalıcılık

fs ile verileri JSON dosyasına kaydedip yüklersin.

Dosya kalıcılığı

Rotalar bellekte yaşar; sunucu yeniden başlınca kaybolur. Veriyi kalıcı kılmak için fs modülüyle dosyaya yazarız. fs.writeFileSync(yol, veri) veriyi senkron olarak yazar; fs.readFileSync(yol, 'utf8') dosyayı dize olarak okur.

Kullanıcı listesini saklamak için saveUsers(data) fonksiyonu yazarsın: fs.writeFileSync(DB_PATH, JSON.stringify(data)). Burada JSON.stringify nesneyi dizeye çevirir. loadUsers() ile geri yüklersin: JSON.parse(fs.readFileSync(DB_PATH, 'utf8')). JSON.parse dizeyi nesneye çevirir. Böylece veri dosyada kalıcı olur; sunucu çökse bile diskte durur.

Kaydet ve yükle

Bu derste saveUsers ve loadUsers fonksiyonlarını ekleyeceğiz. saveUsers({users: ['Ayşe', 'Alex']}) veriyi dosyaya yazar; loadUsers() dosyayı okuyup nesneyi döndürür. Arka arkaya çağırınca veri kalıcı olur.

Önce const fs = require('fs') ile modülü içe aktarırız. const DB_PATH = '/tmp/nodejs-i20.json' ile dosya yolunu sabitleyip tekrar tekrar kullanırız. saveUsers yazma işini, loadUsers okuma işini üstlenir. Son olarak console.log('Yüklendi: ' + JSON.stringify(loadUsers())) ile verinin geri yüklendiğini doğrularız. Çıktı, kaydedilen nesnenin dize karşılığı olur.

Uygulama fs ile kalıcılık ekle

const fs = require('fs') ile içe aktar. const DB_PATH = '/tmp/nodejs-i20.json' tanımla. function saveUsers(data) { fs.writeFileSync(DB_PATH, JSON.stringify(data)); } yaz. function loadUsers() { return JSON.parse(fs.readFileSync(DB_PATH, 'utf8')); } yaz. saveUsers({users: ['Ayşe', 'Alex']}) çağır. console.log('Yüklendi: ' + JSON.stringify(loadUsers())) yazdır.

Başlangıç kodu

index.js
const express = require('express');
const app = express();
const routes = [];
app.get('/health', (req, res) => res.json({ok: true}));
routes.push({method: 'GET', path: '/health'});
console.log('Sunucu hazır');
app.get('/users', (req, res) => res.json([]));
routes.push({method: 'GET', path: '/users'});
app.post('/users', (req, res) => res.json({created: true}));
routes.push({method: 'POST', path: '/users'});
console.log('Rotalar: ' + routes.map(r => r.method + ' ' + r.path).join(', '));

// fs modülünü içe aktar
// saveUsers (writeFileSync) ve loadUsers (readFileSync) yaz
// kaydet ve yükle, sonucu yazdır
// buraya yaz

Örnek çözüm

index.js
const express = require('express');
const app = express();
const routes = [];
app.get('/health', (req, res) => res.json({ok: true}));
routes.push({method: 'GET', path: '/health'});
console.log('Sunucu hazır');
app.get('/users', (req, res) => res.json([]));
routes.push({method: 'GET', path: '/users'});
app.post('/users', (req, res) => res.json({created: true}));
routes.push({method: 'POST', path: '/users'});
console.log('Rotalar: ' + routes.map(r => r.method + ' ' + r.path).join(', '));
const fs = require('fs');
const DB_PATH = '/tmp/nodejs-i20.json';
function saveUsers(data) {
  fs.writeFileSync(DB_PATH, JSON.stringify(data));
}
function loadUsers() {
  return JSON.parse(fs.readFileSync(DB_PATH, 'utf8'));
}
saveUsers({users: ['Ayşe', 'Alex']});
console.log('Yüklendi: ' + JSON.stringify(loadUsers()));

Beklenen çıktı

Sunucu hazır
Rotalar: GET /health, GET /users, POST /users
Yüklendi: {"users":["Ayşe","Alex"]}

Soru ve cevaplar

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

1 Parçayı rolüne eşle

Kavram Anlamı
writeFileSync Veriyi dosyaya yazar
readFileSync Dosyayı dize olarak okur
JSON.stringify Nesneyi dizeye çevirir
JSON.parse Dizeyi nesneye çevirir

2 JSON.stringify({users: ['Ayşe']}) ne üretir?

index.js
JSON.stringify({users: ['Ayşe']})
  • {users: ['Ayşe']}
  • users:Ayşe
  • [Ayşe]
  • {"users":["Ayşe"]} Doğru cevap

Açıklama: JSON.stringify nesneyi {"users":["Ayşe"]} dizesine çevirir.

3 writeFileSync satırını tamamla

Soru
fs.writeFileSync(DB_PATH, JSON.____(data));
Cevap
fs.writeFileSync(DB_PATH, JSON.stringify(data));

Açıklama: JSON.stringify nesneyi dizeye çevirir, writeFileSync dosyaya yazar.

Orta seviye bölümündeki tüm dersler