meilleure gestion des erreurs en JavaScript

JavaScript prend en chargetry/catch/finally mais L’objet Error qu’il utilise fonctionne différemment des Exceptions dans d’autres langues et il ne fournit pas un moyen d’attraper les erreurs par type de la même manière que vous le pouvez avec les Exceptions en Java ou c#.

certains fournisseurs ont implémenté une clause catch conditionnelle, mais ce n’est pas une norme et n’est pas largement pris en charge dans les navigateurs.,

en raison de l’absence d’un moyen standard de définir les erreurs — ou de les renvoyer lorsqu’elles sont renvoyées d’un serveur à un client — les informations sur une erreur renvoyée sont souvent perdues, avec des projets comportant une gestion des erreurs sur mesure.

lancer des erreurs dans d’autres langues

Si vous avez déjà utilisé.net / Mono, vous pouvez apprécier à quel point le comportement de gestion des erreurs est prêt à l’emploi, en particulier pour les services web.

Si vous n’êtes pas familier avec la pile.net/Mono nue avec moi ici pendant une minute, nous reviendrons sur sa pertinence ci-dessous.

les conventions de Nommage

.,NET a des conventions de nommage pour les erreurs, comme InputValidationException pour les erreurs de validation d’entrée et SecurityException pour les erreurs d’autorisations, ce qui est idéal pour encourager la cohérence dans la gestion des erreurs.

erreurs de sérialisation

Une autre grande caractéristique de.NET est que lancer automatiquement une exception sur le serveur dans un service web peut automatiquement lancer cette exception dans un client utilisant le service — que le client soit C#, Java, PHP ou JavaScript.,

ceci est possible grâce au Web Services Description Language (WSDL), qui définit comment les objets, y compris les Exceptions, sont sérialisés et a un support natif dans certains langages (y compris C# et PHP) et un support via des bibliothèques tierces dans d’autres (y compris Java et JavaScript).

avantages d’avoir une convention

ce qui est si bien d’avoir des conventions pour les erreurs, c’est qu’il est plus facile de bien gérer les erreurs spécifiques car elles ont des types explicites et cohérents.,

avec les types d’erreur prédéfinis, vous pouvez facilement décider de la quantité de détails que vous souhaitez renvoyer au client (tels que les noms des champs qui ont échoué à la validation et ce qui ne va pas) tout en enregistrant des informations de trace de pile supplémentaires sur le serveur lorsque des erreurs inattendues sont déclenchées.

Vous pouvez également ajouter des propriétés spécifiques à une erreur, pour faciliter la mise en évidence de l’emplacement d’un problème, comme un champ de saisie avec une valeur non valide.

la sérialisation est automatique et cohérente à travers une application, y compris entre les clients et les serveurs., Cela facilite la gestion des erreurs côté serveur et dans une interface utilisateur.

définition des types d’erreur en JavaScript

JavaScript a en fait plusieurs types d’erreur de base par défaut, mais ils sont assez niches et d’une utilité limitée pour la gestion des erreurs dans la plupart des applications.

cependant, avec ES6, vous pouvez étendre la classe Error et définir des erreurs personnalisées avec leur propre comportement — telles que les erreurs de journalisation automatiquement – et vous pouvez choisir quel détail ajouter ou inclure lors du retour d’une erreur.,

Vous pouvez définir chaque classe dans un fichier ou – si vous avez seulement un petit nombre de types d’erreur, ce qui est probablement le cas pour la plupart des projets, – vous pouvez définir le tout dans un seul fichier nommé exportations.

un exemple d’exportation de différents types d’erreur en tant qu’exports nommés:

Vous pouvez utiliser des erreurs personnalisées dans votre code comme vous le feriez avec une erreur normale:

Remarque: Cet exemple est pour Node.js et utilise « requiert »., Si vous l’écrivez pour ES6 dans le navigateur (ou en utilisant Babel pour le code isomorphe), vous écririez l’instruction include comme import { ValidationError } from './error'

lorsque vous lancez une erreur personnalisée, vous pouvez vérifier quel type est (par exemple, en regardant la valeur de .name) et décidez comment la gérer en conséquence:

définir une propriété name, une propriété standard de la classe Error en JavaScript, permet de vérifier facilement le type D’erreur s’il est sérialisé dans un objet standard dans un appel REST ou dans un rappel de service socket, de sorte que—par exemple, d’une méthode interne, au gestionnaire de routage du serveur web et jusqu’à un navigateur —et toujours savoir ce qui s’est passé.,

Si vous renvoyez une erreur à partir d’un service REST ou basé sur un socket, l’erreur sera généralement sérialisée en JSON et retour, et sera probablement transformée en un objet simple (et ne sera plus un objet D’erreur) au moment où le client évaluera la réponse, mais définir des types d’erreur comme celui-ci dans vos projets peut

Retour d’Erreur objets de Promesses

Vous pouvez utiliser d’Erreur personnalisés objets à l’intérieur d’une Promesse trop.,

Il est préférable d’éviter de lancer des erreurs à l’intérieur d’une promesse, car elles peuvent ne pas toujours être interceptées, selon la structure du code qui les a appelées.

cependant, il est recommandé de renvoyer une erreur lors du rejet d’une promesse, et vous pouvez renvoyer des types personnalisés D’erreur comme toute autre erreur.

Lors de l’appel de la fonction, votre catch() clause pouvez ensuite vérifier pour voir la réponse lorsqu’une erreur est renvoyée. Si vous renvoyez une instance D’erreur (ou une classe qui l’étend), vous aurez une trace de pile complète de l’erreur qui a été lancée.,

tout code utilisant déjà cette fonction et qui attendait un objet D’erreur sera compatible avec une erreur personnalisée qui étend la classe D’erreur par défaut.

sérialisation des objets D’erreur dans JSON

par défaut, les objets D’erreur se sérialisent en JSON avec une sortie comme celle-ci:

{ name: 'ValidationError' }

Cette sortie n’est pas particulièrement utile si vous souhaitez renvoyer les erreurs directement à un frontal web à partir Socket.IO.,

Vous pouvez remplacer la méthode de sérialisation pour renvoyer une réponse différente:

cet exemple renvoie la réponse encapsulée dans une propriété appelée ‘error’, ce qui facilite la vérification dans les réponses. Il se séralise en JSON comme ceci:

{ 
error: {
name: 'ValidationError',
message: 'A validation error',
stacktrace: '…'
}
}

Si vous avez plusieurs types d’erreur, vous pouvez créer votre propre classe d’erreur personnalisée qui étend L’erreur, puis baser toutes vos classes d’erreur sur cela.,

L’utilisation de codes D’état HTTP est appropriée sur les services HTTP, mais avoir un format standard pour les erreurs dans JSON est toujours utile – en particulier dans d’autres contextes, comme les réponses envoyées via une connexion socket.

Vous ne voudrez peut-être pas inclure une trace de pile (avec des noms de fichiers et des numéros de ligne) en production, mais cela peut être utile pour le développement et les tests et vous pouvez utiliser un conditionnel afin qu’ils ne soient renvoyés qu’en développement.,

Summary

S’inspirer du fonctionnement de la gestion des erreurs dans d’autres langages comme Java et C# et définir des erreurs personnalisées avec des méthodes standard pour les séraliser ne nécessite pas beaucoup de code à implémenter et fournit une convention cohérente et facilement compréhensible à suivre.

L’établissement de bonnes conventions de gestion des erreurs dans un projet peut faciliter l’amélioration de l’expérience utilisateur de votre logiciel, écraser les mystérieux messages « d’erreur inconnue », traquer les causes de comportements inattendus et faciliter la journalisation, le suivi et le rapport des erreurs.

Author: admin

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *