Hataları Yönetme
Coddy'nin Node.js Journey'sinin Node.js Temelleri bölümünün bir parçası. Ders 16 / 33.
Elle düzenlenen bir notes.json bozulabilir. Bu durumda JSON.parse hata fırlatır ve Node bir yığın izi yazdırır: hataya yol açan kod satırlarının uzun listesi.
try, hata fırlatabilecek kodu çalıştırır. Hata fırlatıldığında catch hatayı alır ve programın ne söyleyeceğine sen karar verirsin. err.message, hatanın tek satırlık nedenidir.
let config;
try {
config = JSON.parse('{ port: 3000 }');
} catch (err) {
console.error(`config is broken: ${err.message}`);
process.exit(1);
}Hatayı yakalayıp boş bir listeyle devam etme: sonraki add hasarlı dosyanın üzerine kaydeder ve içindeki tüm notlar kaybolur.
Görev
KolayBirisi notes.json dosyasını elle düzenledi ve fazladan bir virgül bıraktı. Şimdi JSON.parse hata veriyor ve Node uzun bir yığın izleme çıktısı yazdırıyor. Aracın bunun yerine tek ve anlaşılır bir satır yazdırmasını ve ardından durmasını sağlayın; böylece hasarlı dosyanın üzerine asla kayıt yapmaz.
store.jsiçinde notların yüklendiği yeri bulun:storenesnesinin içindekiJSON.parse(readFileSync(...)). Dosya geçerli JSON olmadığındaJSON.parseişlevinin verdiği hatayı yakalayın.trybir nesnenin içinde yer alamaz; bu yüzden yükleme işlemini nesnenin üstünde bir işleve veya değişkene taşıyın ve sonucununotesiçin kullanın.- Ayrıştırma başarısız olduğunda stderr'e tek bir satır yazdırın, ardından 1 koduyla çıkın. Satır
notes.json is damaged:ile başlar veJSON.parseişlevinin verdiği neden olan hata mesajıyla devam eder; örneğinUnexpected token ']'. Yığın izleme çıktısını yazdırmayın. Boş bir listeyle devam etmeyin: sonrakiaddkomutu hasarlı notların üzerine kayıt yapar. notes.jsondosyasının bulunmaması, önceki gibi boş bir depo anlamına gelmeye devam eder. Her komut depoyu yüklediği için denetim her komutta çalışır.
Deneyin: herhangi bir şeyi değiştirmeden önce $ node notes.js sonrasındaki kutuya list yazın. Kırmızı bir yığın izleme çıktısı görürsünüz. Değişikliğinizden sonra list yalnızca kırmızı notes.json is damaged: ... satırını yazdırır ve 1 çıkış koduyla sonlanır. Notlarınızı yeniden görmek için notes.json dosyasındaki "Call Ada" ifadesinden sonraki virgülü silin ve list komutunu çalıştırın. Ardından “Kontrol et”e basmadan önce virgülü geri koyun: denetimler hasarlı dosyaya ihtiyaç duyar ve Reset files kendi düzenlemelerinizi geri almaz.
Kendin dene
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
const file = 'notes.json';
const store = {
notes: existsSync(file) ? JSON.parse(readFileSync(file, 'utf8')) : [],
save() {
writeFileSync(file, JSON.stringify(this.notes, null, 2));
},
add(text) {
this.notes.push(text);
this.save();
return this.notes.length;
},
remove(n) {
const [text] = this.notes.splice(n - 1, 1);
this.save();
return text;
},
};
export default store;
Node.js Temelleri bölümündeki tüm dersler
1JavaScript’i Node Üzerinde Çalıştırma
Merhaba, NodeKomutu OkumaKomut Satırı ArgümanlarıKomutlarKendi başına pratik yap: Express playground