‫Homme : Dans cette vidéo, nous allons
‫maintenant implémenter le middleware global de gestion des erreurs dont
‫nous venons de parler.
‫N'oubliez donc pas que le
‫but est d'écrire une fonction middleware,
‫qui sera capable de gérer des erreurs opérationnelles comme celle-ci.
‫D'accord, alors quand un utilisateur accède à une URL qui n'existe pas, alors
‫qu'on peut considérer cela comme une erreur opérationnelle, et
‫dans ce cas on s'en occupe en renvoyant
‫cette réponse ici, non ?
‫Mais encore une fois, l'objectif est de le faire dans un endroit central.
‫Par exemple, nous avons des trucs similaires ici.
‫Donc, partout ici, nous avons ces extraits
‫ici, qui gèrent les erreurs.
‫Nous devons donc supprimer le bloc etch ici, et s'il y
‫a une erreur, eh bien, nous
‫la traitons en envoyant cette erreur au client.
‫Et encore une fois, à la fin,
‫nous voulons nous débarrasser de tout cela et gérer
‫l'erreur dans un middleware central.
‫Et donc commençons maintenant par
‫créer cette fonction middleware.
‫Et dans Express, c'est en fait très simple.
‫Rappelez-vous comment je vous ai dit qu'Express est
‫déjà livré avec des gestionnaires de
‫middleware prêts à l'emploi.
‫Donc, comme toujours, nous commençons par utiliser app. use, d'accord, et puis
‫ici, nous définissons notre fonction middleware.
‫Ainsi, pour définir un middleware de
‫gestion d'erreurs, il suffit de donner quatre arguments
‫à la fonction middleware et Express le reconnaîtra alors
‫automatiquement comme un middleware de gestion d'erreurs.
‫Et donc, ne l'appelez qu'en cas d'erreur.
‫Et donc, tout comme dans de nombreux autres cas,
‫cette fonction middleware est une première fonction d'erreur, ce
‫qui signifie que le
‫premier argument
‫est l'erreur, puis nous avons la demande, la réponse et la suivante.
‫Ainsi, en spécifiant quatre paramètres, Express sait automatiquement que
‫toute cette fonction ici est un
‫middleware de gestion des erreurs.
‫Implémentons maintenant le code de cette fonction ici et après cela, je
‫vous montrerai comment nous pouvons réellement créer
‫une erreur afin que cette fonction middleware soit
‫réellement interceptée.
‫Donc, en deux étapes, nous créons d'abord le middleware, puis dans
‫la deuxième étape, nous
‫allons réellement créer une erreur afin que cette fonction soit interceptée.
‫Et pour l'instant, restons très simple ici.
‫Donc, tout ce que nous voulons vraiment faire
‫pour gérer cette erreur est de renvoyer une réponse au client.
‫Donc rés. statut, mais maintenant nous
‫ne savons pas vraiment de quel code de statut il s'agit, n'est-ce pas ?
‫Ainsi, par exemple, dans ce cas, il s'agit d'un 404, mais
‫nous avons ici des erreurs qui ont d'autres codes d'état.
‫Comme nous avons un 400 par exemple pour une mauvaise demande,
‫ou vraiment toutes sortes d'autres codes.
‫Et donc nous voulons en fait lire
‫ce code d'état à partir de l'objet d'erreur, d'accord ?
‫Ainsi, lorsque nous créerons cette erreur un peu
‫plus tard dans la deuxième
‫étape, comme je vous l'ai dit, nous définirons ce code d'état sur l'erreur.
‫Alors disons le code d'état, et maintenant je veux définir une valeur
‫par défaut ici.
‫Parce qu'il y aura des erreurs qui ne viendront
‫pas de nous car il y aura des
‫erreurs sans code d'état, donc des erreurs qui ne
‫sont pas créées par nous, mais par exemple à d'autres endroits
‫dans l'application de note.
‫Et je sais que cela semble un peu déroutant pour le moment,
‫mais vous le verrez tout au long de cette section.
‫Pour l'instant, définissons simplement ce code de statut
‫par défaut.
‫Donc on dit que l'erreur. statuscode est
‫égal à err. statuscode essentiellement s'il est défini
‫ou le code 500, ce qui signifie encore une fois une erreur de
‫serveur interne, et c'est donc généralement la norme
‫que nous utilisons.
‫Et de la même manière, nous définissons également le statut,
‫donc disons erreur. le statut est égal à l'erreur. status s'il est
‫défini, et sinon, c'est une
‫erreur.
‫Donc, l'erreur, rappelez-vous, c'est quand nous avons un code d'état 500 et si c'est
‫un code d'état 400, alors c'est un échec.
‫Ainsi, par exemple ici dans ce 404 , le statut est fail.
‫Et maintenant, ici, nous
‫pouvons ensuite l'utiliser, donc erreur. statuscode, puis envoyez du json, très similaire à
‫ce que nous avons fait auparavant.
‫Nous commençons donc par le statut et lisons cela à partir de l'erreur. statut et le
‫message proviendra également de l'erreur.
‫Alors errez. message et je vais vous montrer dans
‫une seconde comment cette erreur. La propriété message ici est créée.
‫D'accord, mais pour l'instant, il s'agit de notre middleware de gestion
‫des erreurs très simple.
‫Donc très simple, mais pour l'instant ça marche.
‫Et maintenant, la deuxième étape, où nous
‫créons réellement une erreur.
‫Et alors faisons-le ici.
‫Donc, ici même dans cette fonction, qui gère toutes
‫les routes non gérées, alors laissez-moi commenter celle-ci
‫ici et à la place, nous voulons créer une erreur.
‫Alors disons const err et
‫c'est une nouvelle erreur.
‫Nous utilisons donc essentiellement le constructeur d'erreur intégré afin
‫de créer une erreur.
‫Et maintenant, nous pouvons passer une chaîne et cette
‫chaîne sera alors la propriété du message d'erreur.
‫Donc ce dont nous venons de parler ici.
‫Donc ce message devrait être ce message.
‫D'accord?
‫Et puis il devrait dire err. statut qui
‫est
‫échec, puis erreur. statusCode est égal à 404.
‫C'est donc ce que j'ai mentionné avant que nous puissions
‫définir le code d'état et l'état sur l'objet d'erreur.
‫Et c'est exactement ce que nous faisons ici.
‫Nous créons une erreur et nous
‫définissons ensuite le statut et les propriétés du code de statut afin
‫que notre middleware de gestion
‫des erreurs puisse les utiliser à l'étape suivante.
‫Mais maintenant, comment lisons-nous réellement cette prochaine étape ?
‫Alors ce prochain middleware.
‫Eh bien, comme toujours, nous utilisons ensuite.
‫Mais cette fois, nous utilisons ensuite d'une manière spéciale.
‫Parce que maintenant nous devons réellement passer cette
‫erreur dans next, donc si la fonction suivante reçoit un
‫argument, peu importe ce que c'est, Express
‫saura automatiquement qu'il y a eu une erreur donc il
‫supposera que tout ce que nous passons dans next
‫sera un Erreur.
‫Et cela s'applique à chaque fonction suivante dans chaque
‫middleware, n'importe où dans notre application.
‫Encore une fois, chaque fois que nous passons quelque chose dans
‫le suivant, il supposera qu'il s'agit d'une erreur, et
‫il ignorera alors tous les autres middlewares de la
‫pile middleware et enverra l'erreur que nous avons transmise à
‫notre middleware global de gestion des erreurs, qui sera
‫alors , bien sûr, être exécuté.
‫Et donc passons maintenant dans
‫l'erreur qui sautera à nouveau, tous les
‫autres middlewares de la pile et irons directement à celui-ci.
‫Dans ce cas, il n'y
‫a en fait aucun autre middleware au milieu, d'accord ?
‫Donc, c'est vraiment juste le suivant
‫ici, mais si nous devions utiliser next et transmettre une erreur
‫ailleurs, alors bien sûr, cela fonctionnera de la même manière.
‫Et donc testons maintenant tout cela simplement
‫en essayant d'accéder à une route qui n'a pas été définie.
‫Et cela déclenchera alors tout ce code ici, passera au
‫middleware de gestion des erreurs, puis renverra
‫la réponse en fonction de toute cette
‫logique ici.
‫Donc, ici, nous avons toujours notre itinéraire erroné ou inexistant et
‫commençons par appeler celui-ci, qui devrait toujours
‫fonctionner, d'accord, alors juste
‫pour confirmer que tout
‫fonctionne très bien et que c'est le cas,
‫et maintenant celui-ci.
‫Et en effet, nous ne pouvons pas trouver de visites d'API sur ce serveur,
‫et donc notre middleware global de gestion des
‫erreurs fait réellement son travail.
‫Parfait, c'est la première étape pour vraiment implémenter un
‫mécanisme de gestion des erreurs bien meilleur
‫dans notre application.
‫Nous pourrions donc maintenant aller de l'avant et essayer
‫d'implémenter ce genre de choses ici, partout dans tous
‫nos gestionnaires.
‫Par exemple, ici dans toutes ces fonctions que nous
‫avons ici.
‫Donc remplacer tout ce que nous avons ici
‫avec ce genre d'erreur.
‫Mais ce que je veux faire pour l'instant, c'est de
‫créer notre propre classe d'erreurs.
‫Pour que nous n'ayons pas à écrire tout ce code ici et
‫que nous ayons à la place une classe plus rationalisée
‫de nous-mêmes.
‫C'est donc une pratique courante, et faisons-le dans la
‫prochaine vidéo.