Fehler behandeln
Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 16 von 33.
Eine manuell bearbeitete notes.json kann Fehler verursachen. Dann löst JSON.parse einen Fehler aus, und Node gibt einen Stacktrace aus: die lange Liste der Codezeilen, die zum Fehler geführt haben.
try führt Code aus, der einen Fehler auslösen kann. Wenn das passiert, erhält catch den Fehler, und dein Programm entscheidet, was es ausgibt. err.message enthält den Grund in einer einzigen Zeile.
let config;
try {
config = JSON.parse('{ port: 3000 }');
} catch (err) {
console.error(`config is broken: ${err.message}`);
process.exit(1);
}Fange den Fehler nicht ab und mache mit einer leeren Liste weiter: Das nächste add würde die beschädigte Datei überschreiben, und jede darin enthaltene Notiz wäre verloren.
Aufgabe
EinfachJemand hat notes.json von Hand bearbeitet und ein Komma zu viel stehen lassen. Jetzt löst JSON.parse einen Fehler aus, und Node gibt einen langen Stacktrace aus. Sorge dafür, dass das Tool stattdessen eine klare Zeile ausgibt und dann beendet wird, damit es die beschädigte Datei niemals überschreibt.
- Suche in
store.jsdie Stelle, an der die Notizen geladen werden:JSON.parse(readFileSync(...))innerhalb des Objektsstore. Fange den Fehler ab, denJSON.parseauslöst, wenn die Datei kein gültiges JSON enthält. Eintrykann nicht innerhalb eines Objekts stehen. Verlagere das Laden also in eine Funktion oder Variable oberhalb des Objekts und verwende deren Ergebnis fürnotes. - Wenn das Parsen fehlschlägt, gib eine Zeile auf stderr aus und beende dann das Programm mit Code 1. Die Zeile beginnt mit
notes.json is damaged:und fährt mit der Fehlermeldung fort, also dem Grund, denJSON.parseangibt, zum BeispielUnexpected token ']'. Gib den Stacktrace nicht aus. Fahre nicht mit einer leeren Liste fort: Der nächste Aufruf vonaddwürde die beschädigten Notizen überschreiben. - Eine fehlende
notes.jsonbedeutet weiterhin, dass der Speicher leer ist, wie bisher. Die Prüfung wird bei jedem Befehl ausgeführt, da jeder Befehl den Speicher lädt.
Probiere es aus: Gib list in das Feld nach $ node notes.js ein, bevor du etwas änderst. Du siehst einen roten Stacktrace. Nach deiner Änderung gibt list nur die rote Zeile notes.json is damaged: ... und den Exit-Code 1 aus. Um deine Notizen wieder zu sehen, lösche das Komma nach "Call Ada" in notes.json und führe list aus. Füge das Komma wieder ein, bevor du auf „Prüfen“ klickst: Die Prüfungen benötigen die beschädigte Datei, und „Dateien zurücksetzen“ macht deine eigenen Änderungen nicht rückgängig.
Probier es selbst
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;
Alle Lektionen in Node.js-Grundlagen
1JavaScript mit Node ausführen
Hallo, NodeDen Befehl lesenKommandozeilenargumenteBefehle3Dateien
JSON-Text und WerteEine Datei lesenJSON-Text schreibenEine Datei schreibenEine Notiz entfernenÜbe selbstständig: Express-Playground