La gestion des exceptions en JavaScript et dans Node.js est réalisée principalement à l'aide des blocs try...catch. Ces structures permettent de "capturer" les erreurs qui se produisent dans le bloc try et de les "traiter" dans le bloc catch. Cela permet d'éviter que des erreurs non gérées ne fassent planter l'application.

Voici comment vous pouvez utiliser try...catch pour gérer les exceptions :

try {
  // Code susceptible de générer une exception
  const data = JSON.parse(inputData);
  // Plus de code qui peut potentiellement lancer des erreurs
} catch (error) {
  // Gestion de l'erreur
  console.error(error);
  // Vous pouvez effectuer différentes actions ici, comme :
  // - enregistrer l'erreur dans un fichier de log
  // - envoyer une réponse d'erreur à un client web
  // - relancer l'erreur si elle ne peut pas être gérée ici
}

 

Dans le bloc catch, l'objet error contient des informations sur l'erreur qui s'est produite dans le bloc try. Cet objet a généralement deux propriétés principales : name (le nom de l'erreur) et message (un message décrivant l'erreur).

Gestion des Erreurs Asynchrones

Dans les fonctions asynchrones utilisant async/await, vous pouvez également utiliser try...catch pour gérer les erreurs de manière similaire :

async function fetchData() {
  try {
    // tester avec https://catfact.ninja/fact
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('Erreur lors de la récupération des données:', error);
    // Gérer l'erreur ou la relancer
    throw error; // Relance l'erreur si vous ne pouvez pas la gérer ici
  }
}

 

Bonnes Pratiques

  • Ne pas surutiliser try...catch : N'entourez pas tout votre code avec try...catch ; utilisez-le autour des sections spécifiques où les erreurs sont attendues ou où elles peuvent être gérées de manière significative.
  • Gestion spécifique des erreurs : Si possible, traitez les erreurs de manière spécifique plutôt que d'utiliser un seul bloc catch pour toutes sortes d'erreurs. Vous pouvez utiliser l'instance de l'erreur (instanceof) pour distinguer les types d'erreurs.
  • Nettoyage dans finally : Si vous devez nettoyer des ressources (comme fermer des fichiers ou des connexions à des bases de données), utilisez un bloc finally qui s'exécute que l'erreur se produise ou non.

     

    try {
      // Code qui peut échouer
    } catch (error) {
      // Gestion des erreurs spécifiques
      if (error instanceof SpecificError) {
        // Traitement spécifique
      } else {
        // Gestion des erreurs générales
        throw error; // Ou log, etc.
      }
    } finally {
      // Nettoyage des ressources, exécuté toujours
    }
    
  • Promesses et .catch() : Pour les promesses, assurez-vous d'utiliser .catch() ou le bloc try...catch avec async/await pour gérer les rejets de promesses.
  • Erreurs personnalisées : Vous pouvez définir des classes d'erreurs personnalisées pour gérer des situations d'erreur spécifiques de manière plus contrôlée.

En suivant ces pratiques, vous pouvez vous assurer que votre application Node.js gère les erreurs de manière robuste et évite de s'arrêter inopinément en raison d'exceptions non gérées.

 
Modifié le: jeudi 30 novembre 2023, 04:44