Node.js
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.
Örnek çözümü göster
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()));
Kendini test et
-
Parçayı rolüne eşle
- writeFileSync
- Veriyi dosyaya yazar
- readFileSync
- Dosyayı dize olarak okur
- JSON.stringify
- Nesneyi dizeye çevirir
- JSON.parse
- Dizeyi nesneye çevirir
-
JSON.stringify({users: ['Ayşe']}) ne üretir?
JSON.stringify({users: ['Ayşe']})
- {users: ['Ayşe']}
- users:Ayşe
- [Ayşe]
- {"users":["Ayşe"]}
Cevabı göster
{"users":["Ayşe"]} — JSON.stringify nesneyi {"users":["Ayşe"]} dizesine çevirir.
-
writeFileSync satırını tamamla
fs.writeFileSync(DB_PATH, JSON.____(data));
Cevabı göster
fs.writeFileSync(DB_PATH, JSON.stringify(data));
Sıradaki ders: Middleware