Gestion des erreurs
Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 16 sur 33.
Un fichier notes.json modifié à la main peut être endommagé. Dans ce cas, JSON.parse lève une exception, et Node affiche une trace de pile : la longue liste des lignes de code qui ont conduit à l’erreur.
try exécute du code susceptible de lever une exception. Dans ce cas, catch reçoit l’erreur et ton programme décide quoi afficher. err.message donne la raison en une seule ligne.
let config;
try {
config = JSON.parse('{ port: 3000 }');
} catch (err) {
console.error(`config is broken: ${err.message}`);
process.exit(1);
}Ne capture pas l’erreur pour continuer avec une liste vide : le prochain add écraserait le fichier endommagé, et toutes les notes qu’il contient seraient perdues.
Défi
FacileQuelqu’un a modifié notes.json à la main et a laissé une virgule de trop. Maintenant, JSON.parse lève une erreur, et Node affiche une longue trace de pile. Fais en sorte que l’outil affiche plutôt une seule ligne claire, puis s’arrête, afin qu’il n’enregistre jamais par-dessus le fichier endommagé.
- Dans
store.js, repère l’endroit où les notes sont chargées :JSON.parse(readFileSync(...)), à l’intérieur de l’objetstore. Intercepte l’erreur queJSON.parselève lorsque le fichier n’est pas un JSON valide. Untryne peut pas se trouver dans un objet ; déplace donc le chargement dans une fonction ou une variable au-dessus de l’objet, puis utilise son résultat pournotes. - Si l’analyse échoue, affiche une seule ligne sur stderr, puis quitte avec le code 1. La ligne commence par
notes.json is damaged:et se poursuit avec le message de l’erreur, qui indique la raison donnée parJSON.parse, par exempleUnexpected token ']'. N’affiche pas la trace de pile. Ne continue pas avec une liste vide : le prochainaddenregistrerait par-dessus les notes endommagées. - Si
notes.jsonest absent, cela signifie toujours que le magasin est vide, comme auparavant. La vérification s’effectue pour chaque commande, car chaque commande charge le magasin.
Essaie : saisis list dans la zone après $ node notes.js avant de modifier quoi que ce soit. Tu vois une trace de pile rouge. Après ta modification, list affiche uniquement la ligne rouge notes.json is damaged: ... et le code de sortie 1. Pour revoir tes notes, supprime la virgule après "Call Ada" dans notes.json, puis exécute list. Remets ensuite la virgule avant d’appuyer sur « Vérifier » : les vérifications ont besoin du fichier endommagé, et « Réinitialiser les fichiers » n’annule pas tes propres modifications.
Essayez vous-même
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;
Toutes les leçons de Les bases de Node.js
1Exécuter JavaScript avec Node
Bonjour, NodeLire la commandeArguments de ligne de commandeCommandes5Événements, entrées et packages
Écouter avant d’émettreÉmetteurs d’événementsLire les entrées3Fichiers
Texte JSON et valeursLire un fichierÉcrire du texte JSONÉcrire dans un fichierSupprimer une noteEntraînez-vous par vous-même : Playground Express