Obsługa błędów
Część sekcji Podstawy Node.js ścieżki Node.js w Coddy. Lekcja 16 z 33.
Ręcznie edytowany plik notes.json może przestać działać. Wtedy JSON.parse zgłasza wyjątek, a Node wyświetla ślad stosu: długą listę wierszy kodu, które doprowadziły do błędu.
try uruchamia kod, który może zgłosić wyjątek. Gdy tak się stanie, catch otrzymuje błąd, a Twój program decyduje, co wyświetlić. err.message zawiera jednolinijkowy opis przyczyny.
let config;
try {
config = JSON.parse('{ port: 3000 }');
} catch (err) {
console.error(`config is broken: ${err.message}`);
process.exit(1);
}Nie przechwytuj błędu i nie kontynuuj działania z pustą listą: następne add zapisałoby zmiany w uszkodzonym pliku, a wszystkie zapisane w nim notatki zostałyby utracone.
Wyzwanie
ŁatwyKtoś ręcznie edytował plik notes.json i zostawił o jeden przecinek za dużo. Teraz JSON.parse zgłasza błąd, a Node wyświetla długi ślad stosu. Zmień narzędzie tak, aby zamiast tego wyświetlało jeden czytelny wiersz i kończyło działanie, dzięki czemu nigdy nie zapisze danych w uszkodzonym pliku.
- W pliku
store.jsznajdź miejsce, w którym wczytywane są notatki:JSON.parse(readFileSync(...))wewnątrz obiektustore. Przechwyć błąd zgłaszany przezJSON.parse, gdy plik nie zawiera prawidłowego JSON-a.trynie może znajdować się wewnątrz obiektu, więc przenieś wczytywanie do funkcji lub zmiennej umieszczonej przed obiektem i użyj jej wyniku dlanotes. - Gdy parsowanie się nie powiedzie, wyświetl jeden wiersz na stderr, a następnie zakończ działanie z kodem 1. Wiersz zaczyna się od
notes.json is damaged:, a dalej zawiera komunikat błędu, czyli przyczynę podawaną przezJSON.parse, na przykładUnexpected token ']'. Nie wyświetlaj śladu stosu. Nie kontynuuj działania z pustą listą: następne polecenieaddzapisałoby dane w miejsce uszkodzonych notatek. - Brak pliku
notes.jsonnadal oznacza pusty magazyn, tak jak wcześniej. Sprawdzenie jest wykonywane przy każdym poleceniu, ponieważ każde polecenie wczytuje magazyn.
Wypróbuj: zanim cokolwiek zmienisz, wpisz list w polu po $ node notes.js. Zobaczysz czerwony ślad stosu. Po wprowadzeniu zmiany polecenie list wyświetli tylko czerwony wiersz notes.json is damaged: ... i kod wyjścia 1. Aby znów zobaczyć swoje notatki, usuń przecinek po "Call Ada" w pliku notes.json i uruchom polecenie list. Następnie przywróć przecinek, zanim naciśniesz „Sprawdź”: testy wymagają uszkodzonego pliku, a opcja Reset files nie cofa wprowadzonych przez ciebie zmian.
Spróbuj swoich sił
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;
Wszystkie lekcje w sekcji Podstawy Node.js
1Uruchamianie JavaScript w Node
Witaj, NodeOdczytywanie poleceniaArgumenty wiersza poleceńPolecenia5Zdarzenia, dane wejściowe i pakiety
Nasłuchuj przed emisjąEmitery zdarzeńOdczytywanie danych wejściowychPoćwicz samodzielnie: Edytor online Express