‫Instructeur : Bienvenue à nouveau, maintenant, avant
‫d'approfondir la gestion des erreurs, écrivons d'abord un
‫gestionnaire pour les routes non définies.
‫Donc en gros pour les routes auxquelles nous n'avons pas
‫encore assigné de gestionnaire.
‫Et tout d'abord, nous devons démarrer notre application ici,
‫que nous n'avons pas quittée après la récente session de débogage.
‫Alors MPM commence.
‫Et attendons donc une connexion à la base de données.
‫Le voici, et allons maintenant à Postman ici et essayons de suivre la
‫route que nous n'avons pas encore définie.
‫Donc je vais juste aller de l'avant,
‫copier cette URL ici, d'accord,
‫et donc par exemple
‫disons qu'au
‫lieu de tours apiV1, nous dirions juste api/tours.
‫D'accord, dans ce cas, nous obtiendrions ce résultat HTML,
‫d'accord, donc Express envoie automatiquement
‫ce code HTML ici, ainsi qu'un code d'erreur
‫404 Not Found au cas où il
‫n'y aurait pas de gestionnaire pour l'itinéraire demandé, d'accord.
‫Ou, nous pourrions aussi simplement orthographier tour ici par exemple.
‫Ainsi, par exemple, dans ce cas, nous
‫obtiendrions toujours la même erreur.
‫Maintenant, il y a aussi une autre situation qui
‫est si ici après les tournées nous spécifions autre chose, disons
‫juste quelque chose comme ça.
‫Et donc jetons un coup d'œil à l'erreur que nous
‫obtenons, et maintenant nous obtenons que la conversion en ID d'objet a échoué.
‫Et c'est parce que nous avons
‫en fait un itinéraire qui accepte un paramètre ID ici après le tour/, à droite.
‫Et donc MongoDB essaie essentiellement de trouver un document
‫avec cet ID, mais ne peut pas le convertir en un ID
‫d'objet MongoDB valide, d'accord.
‫Encore une fois, c'est une situation différente, continuons simplement à travailler
‫avec celui-ci, donc encore une fois, où nous obtenons
‫cette erreur mais sous cette forme HTML.
‫Maintenant, puisque nous faisons une API ici, cela
‫n'a pas beaucoup de sens de renvoyer du HTML, d'accord, et donc
‫réparons maintenant cela et créons essentiellement une fonction de gestion pour
‫toutes les routes qui ne sont pas mises en cache par nos routeurs.
‫Bon, revenons à notre application ici et
‫ouvrons l'application. js.
‫D'accord, c'est donc essentiellement la définition
‫de notre application Express.
‫Maintenant, avant de faire quoi que ce
‫soit d'autre, débarrassons-nous en fait de ce middleware dont
‫nous n'avons plus besoin.
‫Nous l'avons donc utilisé ici pour démontrer
‫le concept de middleware, et donc à ce stade, nous
‫n'en avons plus besoin.
‫Très bien maintenant, comment allons-nous implémenter un gestionnaire de route
‫pour une route qui n'a été mise en cache par aucun de
‫nos autres gestionnaires de route ?
‫Donc, pour ce faire, rappelez-vous que toutes ces fonctions
‫middleware sont exécutées dans l'ordre dans lequel elles se trouvent dans le code.
‫Et donc, l'idée est que si nous avons une
‫requête qui en fait ce point ici de notre
‫code, cela signifie que ni le
‫tourRouter ni le userRouter n'ont pu le mettre en cache, d'accord.
‫Et donc, si nous ajoutons un middleware ici après ces routeurs,
‫il ne sera à nouveau atteint que s'il n'est géré par
‫aucun de nos autres routeurs, d'accord.
‫Faisons-le, puis comprenons vraiment comment cela fonctionne une fois qu'il
‫est déjà mis en œuvre.
‫Nous allons donc implémenter un gestionnaire de route,
‫et donc nous disons app.
‫et maintenant la méthode HTTP pour laquelle
‫nous voulons spécifier la route.
‫Maintenant, nous pourrions utiliser get here right, alors comme nous l'avons fait auparavant,
‫mais qu'en est-il des demandes de publication, de
‫suppression ou de correctif?
‫Vous devrez alors également écrire des gestionnaires pour
‫ceux-ci, et nous ne voulons pas cela, nous
‫voulons simplement gérer toutes les routes, donc toutes les URL, pour tous les
‫verbes ici dans ce gestionnaire, d'accord.
‫Et donc dans Express, nous pouvons utiliser app. tous.
‫Et donc ça va s'exécuter pour tous
‫les verbes, donc toute la méthode HTTP, d'accord.
‫Ensuite, nous spécifions l'URL, et puisqu'ici nous
‫voulons gérer toutes les URL qui n'ont
‫pas été gérées avant de pouvoir utiliser l'étoile
‫ici, qui va représenter tout, d'accord, et le reste
‫n'est qu'une fonction middleware normale , juste
‫comme avant.
‫Donc
‫demande, réponse, et ensuite.
‫D'accord, et qu'est-ce qu'on veut faire ici ?
‫Eh bien, nous voulons simplement renvoyer une
‫réponse au format JSON, donc pas le HTML que nous avons actuellement.
‫Donc rés. status,
‫et ici, définissons un 404, donc Not Found,
‫puis une réponse JSON, donc tout comme l'habituel où nous
‫définissons le statut pour échouer.
‫Donc juste une réponse formatée adjacente régulière.
‫Et puis une sorte de message ici, et en
‫fait, faisons une chaîne de
‫modèle ici, car je veux y mettre une variable.
‫Donc impossible,
‫trouve.
‫Et puis nous pouvons utiliser req. originalUrl d'accord, c'est donc
‫une propriété que nous avons sur la demande qui
‫est, comme son nom l'indique, l'URL qui a été demandée,
‫d'accord.
‫Donc, cette nouvelle réponse que
‫nous allons renvoyer maintenant est bien meilleure
‫que le HTML que nous recevions auparavant, alors testons-la maintenant.
‫Et en effet, nous obtenons maintenant un message d'erreur JSON ici.
‫Et donc ici, nous obtenons également l'URL qui a été demandée,
‫et en effet c'est celle à
‫laquelle nous avons essayé d'accéder, mais elle n'est pas disponible, d'accord, super.
‫Maintenant encore, pourquoi cela a-t-il fonctionné ?
‫Donc, encore une fois, l'idée est que si nous pouvons atteindre ce point
‫ici, cela signifie que le cycle de réponse à
‫la demande n'était pas encore terminé
‫à ce stade de notre code, n'est-ce pas.
‫Car rappelez-vous que le middleware est ajouté à
‫la pile de middleware dans l'ordre
‫défini ici dans notre code.
‫Et donc fondamentalement, ce code ici s'exécute
‫en premier, et donc si l'itinéraire correspondait ici dans
‫notre tourRouter, notre demande n'atteindrait même jamais ce code, et
‫donc cela ne serait pas exécuté.
‫Et donc cela devrait être la
‫dernière partie après tous nos autres itinéraires, d'accord.
‫Et si je l'étais, juste pour
‫essayer ceci, placez-le maintenant tout en haut
‫de notre application, vous verrez que quelle que soit la
‫demande que nous allons faire, nous obtiendrons toujours la même réponse.
‫Bon, alors testons cela, et
‫en effet maintenant nous obtenons un message d'erreur JS, et
‫c'est parce que toutes les demandes
‫atteignent maintenant ce gestionnaire de route ici, et il correspond en
‫fait parce que c'est une demande GET, qui fait partie de tous les verbes,
‫à droite, et puis toutes les routes, donc toutes les URL sont
‫mises en cache ici, et donc bien sûr,
‫il gère cette URL que nous venons de faire ici.
‫Et la même chose bien sûr, par exemple pour une tournée de suppression.
‫Donc la même chose se produirait,
‫nous obtiendrions toujours la même
‫réponse, d'accord.
‫Alors, bien sûr, remettons-le en place,
‫mais c'était juste pour montrer comment et pourquoi cela
‫fonctionne, d'accord.
‫Génial, c'est donc une partie importante pour rendre notre API
‫un peu plus conviviale, mais commençons maintenant à en apprendre
‫davantage sur la gestion des erreurs réelles.