Gestion des exceptions avec try-catch
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 avectry...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
catchpour 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 blocfinallyqui 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 bloctry...catchavecasync/awaitpour 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.