﻿1
00:00:01,050 --> 00:00:02,840
‫Instructeur : Utilisons maintenant

2
00:00:02,840 --> 00:00:04,780
‫un peu plus notre activité de

3
00:00:04,780 --> 00:00:07,400
‫classe AppError en ajoutant quelques erreurs 404 et certaines

4
00:00:07,400 --> 00:00:09,493
‫de nos fonctions de gestionnaire de tournée.

5
00:00:10,446 --> 00:00:12,740
‫Maintenant, juste une chose que

6
00:00:12,740 --> 00:00:16,030
‫je voulais dire avant d'implémenter réellement ces erreurs 404,

7
00:00:16,030 --> 00:00:19,640
‫c'est que nous aurions bien sûr pu utiliser la fonction

8
00:00:19,640 --> 00:00:22,290
‫catchAsync également dans notre routeur, d'accord ?

9
00:00:22,290 --> 00:00:24,940
‫Alors, laissez-moi vous montrer comment cela fonctionnerait.

10
00:00:24,940 --> 00:00:27,090
‫Donc, ici dans

11
00:00:27,090 --> 00:00:29,730
‫TourRoutes, j'aurais pu encapsuler cette

12
00:00:30,750 --> 00:00:34,530
‫fonction ici dans catchAsync comme ceci au lieu

13
00:00:34,530 --> 00:00:38,480
‫de le faire directement ici dans le contrôleur.

14
00:00:38,480 --> 00:00:41,400
‫Alors, ici où je l'ai fait en fait, non?

15
00:00:41,400 --> 00:00:44,200
‫Et cela aurait eu exactement le même résultat

16
00:00:44,200 --> 00:00:45,950
‫mais je ne l'ai

17
00:00:45,950 --> 00:00:48,190
‫pas fait de cette façon car comme

18
00:00:48,190 --> 00:00:50,110
‫ça, je dois me rappeler

19
00:00:50,110 --> 00:00:52,350
‫laquelle de ces méthodes ici est

20
00:00:52,350 --> 00:00:54,800
‫en fait une méthode de synchronisation, d'accord,

21
00:00:54,800 --> 00:00:58,960
‫de sorte que seulement sur celles-ci j'ajoute la fonction catchAsync , droit?

22
00:00:58,960 --> 00:01:02,150
‫Maintenant, dans ce cas, en fait, ils sont tous des

23
00:01:02,150 --> 00:01:05,700
‫fonctions asynchrones et donc, ce n'est pas vraiment le problème ici

24
00:01:05,700 --> 00:01:07,530
‫dans cet exemple, mais il y

25
00:01:07,530 --> 00:01:11,150
‫aura des exemples plus tard où tous les gestionnaires ne sont pas

26
00:01:11,150 --> 00:01:12,170
‫des fonctions

27
00:01:12,170 --> 00:01:14,020
‫asynchrones et donc, dans ce cas,

28
00:01:14,020 --> 00:01:17,100
‫j'aurais vraiment pour me rappeler lesquels d'entre eux je dois

29
00:01:17,100 --> 00:01:18,600
‫encapsuler dans catchAsync et

30
00:01:18,600 --> 00:01:20,450
‫lesquels ne le sont pas et

31
00:01:20,450 --> 00:01:23,930
‫donc, le faire dans le contrôleur est beaucoup plus facile car

32
00:01:23,930 --> 00:01:25,520
‫simplement chaque fois que

33
00:01:25,520 --> 00:01:27,190
‫j'écris une fonction asynchrone ici,

34
00:01:27,190 --> 00:01:30,220
‫ils le savent déjà bien, je dois encapsuler dans catchAsync.

35
00:01:30,220 --> 00:01:31,350
‫D'accord.

36
00:01:31,350 --> 00:01:32,880
‫Donc, je ne le fais pas

37
00:01:32,880 --> 00:01:36,400
‫ici, je le fais juste comme je vous l'ai montré dans la dernière vidéo.

38
00:01:36,400 --> 00:01:39,680
‫D'accord et en fait, j'ai rencontré une fois un bogue qui était

39
00:01:39,680 --> 00:01:41,330
‫vraiment difficile à trouver parce

40
00:01:41,330 --> 00:01:43,160
‫que j'ai en fait enveloppé une

41
00:01:43,160 --> 00:01:45,690
‫fonction qui n'était pas asynchrone dans catchAsync et de sorte

42
00:01:45,690 --> 00:01:47,850
‫que nous ne fonctionnions vraiment pas et que

43
00:01:47,850 --> 00:01:50,350
‫je ne pouvais pas comprendre où se trouvait le

44
00:01:50,350 --> 00:01:52,830
‫bogue et j'ai gaspillé beaucoup de temps sur celui-là.

45
00:01:52,830 --> 00:01:56,820
‫Et donc, depuis lors, je ne mets plus catchAsync ici mais vraiment

46
00:01:56,820 --> 00:01:59,610
‫près de là où j'en ai réellement

47
00:01:59,610 --> 00:02:02,860
‫besoin, si près du code qui est en fait asynchrone.

48
00:02:02,860 --> 00:02:04,640
‫D'accord et cela

49
00:02:04,640 --> 00:02:07,820
‫étant dit, implémentons maintenant quelques erreurs 404 ici.

50
00:02:07,820 --> 00:02:09,680
‫Très bien, alors je veux

51
00:02:09,680 --> 00:02:11,680
‫commencer par vous montrer à nouveau l'exemple

52
00:02:11,680 --> 00:02:13,830
‫que nous avons fait dans la dernière vidéo.

53
00:02:13,830 --> 00:02:16,350
‫D'accord, nous avons donc essayé d'obtenir

54
00:02:16,350 --> 00:02:19,780
‫une visite guidée de cet ID étrange qui n'existe

55
00:02:19,780 --> 00:02:20,989
‫pas vraiment

56
00:02:20,989 --> 00:02:23,690
‫et l'erreur que nous avons eue est

57
00:02:23,690 --> 00:02:26,410
‫que, fondamentalement, Mongoose ne pouvait pas convertir

58
00:02:26,410 --> 00:02:29,630
‫cette chaîne ici en un ID valide pour MongoDB.

59
00:02:29,630 --> 00:02:33,653
‫Mais que se passe-t-il lorsque nous utilisons réellement un identifiant MongoDB valide ?

60
00:02:34,750 --> 00:02:38,003
‫Donc, par exemple, ouais, copions celui-ci ici, d'accord,

61
00:02:38,003 --> 00:02:39,173
‫et celui-ci

62
00:02:41,660 --> 00:02:44,670
‫aura bien sûr un résultat et donc,

63
00:02:44,670 --> 00:02:47,770
‫modifions-le légèrement, donc par exemple, le changer à

64
00:02:47,770 --> 00:02:50,060
‫zéro ici sera toujours un identifiant

65
00:02:50,060 --> 00:02:52,340
‫valide , donc ça ressemble

66
00:02:52,340 --> 00:02:53,900
‫à ça et

67
00:02:53,900 --> 00:02:56,000
‫ça ressemble exactement à avant,

68
00:02:56,000 --> 00:02:57,440
‫je viens de

69
00:02:57,440 --> 00:03:00,830
‫changer un numéro mais cet ID n'existera probablement pas.

70
00:03:00,830 --> 00:03:03,470
‫Et donc, voyons ce que nous obtenons alors.

71
00:03:03,470 --> 00:03:06,810
‫Et en effet, maintenant notre résultat ici est nul.

72
00:03:06,810 --> 00:03:10,340
‫D'accord, et donc, ce n'est pas vraiment ce que nous voulons, n'est-ce pas ?

73
00:03:10,340 --> 00:03:14,550
‫Ce que nous voulons ici, c'est afficher un code d'état 404 ici et

74
00:03:14,550 --> 00:03:17,310
‫dire que cette visite n'a pas été trouvée.

75
00:03:17,310 --> 00:03:20,750
‫Bon et donc, utilisons maintenant la classe orAppError

76
00:03:20,750 --> 00:03:22,580
‫pour implémenter cela.

77
00:03:22,580 --> 00:03:24,040
‫Gardez juste à l'esprit que

78
00:03:24,040 --> 00:03:26,880
‫la tournée que nous revenons ici est nulle, d'accord ?

79
00:03:26,880 --> 00:03:29,453
‫Donc, nul que nous pouvons maintenant tester.

80
00:03:30,920 --> 00:03:33,533
‫Donc, si nous allons dans notre gestionnaire getTour,

81
00:03:35,260 --> 00:03:40,260
‫implémentons maintenant s'il n'y a pas de tournée et dans ce cas, nous créerons une

82
00:03:41,030 --> 00:03:43,390
‫erreur et cela fonctionne ici car s'il

83
00:03:44,410 --> 00:03:45,243
‫n'y

84
00:03:45,243 --> 00:03:46,650
‫a pas de tournée,

85
00:03:46,650 --> 00:03:47,710
‫ce sera null.

86
00:03:47,710 --> 00:03:51,610
‫N'oubliez pas qu'en JavaScript, null est une valeur fallacieuse, donc une

87
00:03:51,610 --> 00:03:54,660
‫valeur qui sera convertie en false ici dans

88
00:03:54,660 --> 00:03:56,250
‫une instruction if.

89
00:03:56,250 --> 00:03:58,060
‫D'accord, et donc, s'il n'y a

90
00:03:58,060 --> 00:03:59,450
‫pas de tour, alors

91
00:03:59,450 --> 00:04:01,790
‫tour est faux et non faux est bien sûr

92
00:04:01,790 --> 00:04:04,830
‫vrai et c'est ainsi que nous entrons dans ce bloc if.

93
00:04:04,830 --> 00:04:07,600
‫Alors, qu'est-ce qu'on veut faire s'il n'y a pas de tournée ?

94
00:04:07,600 --> 00:04:11,530
‫Eh bien, nous voulons créer Next avec une erreur.

95
00:04:11,530 --> 00:04:14,861
‫Donc, afin de sauter directement dans l'erreur et le

96
00:04:14,861 --> 00:04:15,990
‫middleware lié.

97
00:04:15,990 --> 00:04:18,870
‫Donc, nous faisons une nouvelle AppError qui n'est

98
00:04:20,610 --> 00:04:23,350
‫pas encore disponible, nous devons encore

99
00:04:23,350 --> 00:04:26,120
‫l'importer mais utilisons-la ici tout de suite.

100
00:04:26,120 --> 00:04:27,950
‫D'accord, et disons

101
00:04:30,500 --> 00:04:34,673
‫simplement Aucune tournée trouvée avec cet identifiant.

102
00:04:35,580 --> 00:04:37,070
‫Et puis un

103
00:04:37,070 --> 00:04:40,940
‫code d'état, rappelez-vous que le deuxième argument est 404, d'accord ?

104
00:04:40,940 --> 00:04:43,460
‫Maintenant, une dernière chose que nous devons

105
00:04:43,460 --> 00:04:46,470
‫faire ici, c'est-à-dire retourner, d'accord parce que nous

106
00:04:46,470 --> 00:04:49,410
‫voulons retourner cette fonction immédiatement et ne pas

107
00:04:49,410 --> 00:04:52,250
‫passer à la ligne suivante qui serait celle-ci

108
00:04:52,250 --> 00:04:53,690
‫et qui essaierait

109
00:04:53,690 --> 00:04:57,800
‫alors d'envoyer deux réponses et nous a déjà rencontré cette erreur auparavant,

110
00:04:57,800 --> 00:05:00,210
‫alors j'espère que vous vous en

111
00:05:00,210 --> 00:05:02,020
‫souviendrez et c'est la

112
00:05:02,020 --> 00:05:05,580
‫raison pour laquelle nous avons toujours besoin de revenir ici.

113
00:05:05,580 --> 00:05:09,610
‫Bon, allons-y maintenant et importons rapidement l'appError et c'est

114
00:05:10,870 --> 00:05:13,200
‫similaire à celui-ci ici, alors

115
00:05:13,200 --> 00:05:14,823
‫dupliquons simplement.

116
00:05:17,990 --> 00:05:21,203
‫D'accord, et ici c'est en fait avec un A majuscule.

117
00:05:22,170 --> 00:05:24,210
‫Très bien, sauvez-le et essayons

118
00:05:24,210 --> 00:05:25,850
‫à nouveau et maintenant,

119
00:05:27,160 --> 00:05:31,450
‫en effet, aucune tournée n'a été trouvée avec cet ID 404.

120
00:05:31,450 --> 00:05:34,440
‫Parfait, donc exactement ce que nous voulions.

121
00:05:34,440 --> 00:05:37,170
‫Oh et vous avez aussi vu que nous avons l'échec ici.

122
00:05:37,170 --> 00:05:40,980
‫D'accord et cela vient aussi de la classe.

123
00:05:40,980 --> 00:05:44,270
‫Génial, donc cela fonctionne et j'espère vraiment que

124
00:05:44,270 --> 00:05:48,060
‫vous avez maintenant compris exactement comment fonctionne maintenant toute

125
00:05:48,060 --> 00:05:50,370
‫cette gestion des erreurs.

126
00:05:50,370 --> 00:05:53,300
‫D'accord, donc encore une fois, nous créons une erreur et

127
00:05:53,300 --> 00:05:55,450
‫nous passons ensuite cette erreur dans next

128
00:05:55,450 --> 00:05:57,820
‫et dès que la prochaine reçoit quelque chose,

129
00:05:57,820 --> 00:05:59,880
‫il suppose qu'il s'agit d'une erreur

130
00:05:59,880 --> 00:06:00,757
‫et il

131
00:06:00,757 --> 00:06:03,630
‫sautera directement dans le middleware global de gestion des

132
00:06:03,630 --> 00:06:06,683
‫erreurs qui enverra ensuite la réponse pour nous , d'accord?

133
00:06:08,210 --> 00:06:09,850
‫Alors, copions celui-ci

134
00:06:09,850 --> 00:06:12,410
‫et plaçons-le dans tous les autres gestionnaires

135
00:06:12,410 --> 00:06:15,600
‫qui interrogent les documents en fonction de l'ID.

136
00:06:15,600 --> 00:06:20,470
‫Donc, ne créez pas de tournée mais mettez à jour une tournée, d'accord ?

137
00:06:20,470 --> 00:06:21,380
‫Et donc,

138
00:06:21,380 --> 00:06:23,120
‫ici pareil, si nous essayons de mettre

139
00:06:23,120 --> 00:06:24,360
‫à jour la tournée qui

140
00:06:24,360 --> 00:06:26,773
‫n'existe pas, cela nous donnera alors exactement la même erreur.

141
00:06:29,210 --> 00:06:32,470
‫Enfin bien sûr la même chose avec delete.

142
00:06:32,470 --> 00:06:35,870
‫Et maintenant vous voyez que ESLint m'a donné cette erreur ici

143
00:06:35,870 --> 00:06:38,710
‫et donc, c'est parce que cette tournée n'est pas

144
00:06:38,710 --> 00:06:41,730
‫définie et dans ce cas, ESLint m'a vraiment épargné

145
00:06:41,730 --> 00:06:43,660
‫ici de créer ce bogue.

146
00:06:43,660 --> 00:06:44,550
‫Droit?

147
00:06:44,550 --> 00:06:46,790
‫Donc, encore une fois sans ESLint, je

148
00:06:46,790 --> 00:06:48,570
‫l'aurais probablement juste collé ici et

149
00:06:48,570 --> 00:06:49,920
‫l'aurais appelé un

150
00:06:49,920 --> 00:06:53,050
‫jour sans même remarquer que la visite n'est définie nulle part

151
00:06:53,050 --> 00:06:54,600
‫à l'intérieur de cette fonction,

152
00:06:54,600 --> 00:06:57,830
‫mais puisque nous avons installé cet outil vraiment précieux, je peux

153
00:06:57,830 --> 00:06:59,970
‫maintenant aller de l'avant et le réparer.

154
00:06:59,970 --> 00:07:01,820
‫Très bien, donc jusqu'à

155
00:07:01,820 --> 00:07:06,490
‫présent, nous avons simplement attendu cette instruction de suppression ici et n'en avons pas

156
00:07:06,490 --> 00:07:08,460
‫enregistré le résultat et c'est simplement

157
00:07:08,460 --> 00:07:10,710
‫parce que nous n'en avions pas besoin.

158
00:07:10,710 --> 00:07:13,200
‫D'accord, mais pour le moment, nous en avons réellement

159
00:07:13,200 --> 00:07:15,140
‫besoin car nous voulons cette variable de

160
00:07:15,140 --> 00:07:18,413
‫tournée afin de vérifier s'il y a réellement une tournée ou non.

161
00:07:21,460 --> 00:07:23,760
‫Donc, très facile, const tour et ensuite

162
00:07:23,760 --> 00:07:25,350
‫égal à ce résultat,

163
00:07:25,350 --> 00:07:27,450
‫donnez-lui une sauvegarde et l'erreur disparaîtra.

164
00:07:28,610 --> 00:07:29,820
‫Tellement bon.

165
00:07:29,820 --> 00:07:32,770
‫ESLint au travail, d'accord ?

166
00:07:32,770 --> 00:07:37,770
‫Maintenant, vous avez peut-être remarqué que je n'ai pas ajouté cette erreur 404

167
00:07:37,950 --> 00:07:40,000
‫ici dans ce gestionnaire getAllTour.

168
00:07:40,000 --> 00:07:41,910
‫Alors, pourquoi j'ai fait ça ?

169
00:07:41,910 --> 00:07:43,620
‫Et laissez-moi vous expliquer pourquoi.

170
00:07:43,620 --> 00:07:46,330
‫Ainsi, lorsqu'il n'y a aucun résultat trouvé, par

171
00:07:46,330 --> 00:07:50,530
‫exemple, aucun résultat ne correspond à un filtre, ou parce que la

172
00:07:50,530 --> 00:07:52,520
‫page demandée n'existe pas,

173
00:07:52,520 --> 00:07:55,970
‫alors bien sûr, nous pourrions envisager d'envoyer une erreur 404

174
00:07:55,970 --> 00:07:58,550
‫et de dire que les données n'étaient

175
00:07:58,550 --> 00:08:01,220
‫pas trouvé mais à mon avis et

176
00:08:01,220 --> 00:08:03,760
‫aussi l'avis d'autres développeurs, ce n'est pas

177
00:08:03,760 --> 00:08:07,170
‫tout à fait correct dans cette demande car il

178
00:08:07,170 --> 00:08:09,240
‫n'y avait pas vraiment d'erreur.

179
00:08:09,240 --> 00:08:11,950
‫Je veux dire, la demande a été correctement reçue.

180
00:08:11,950 --> 00:08:14,550
‫La base de données a correctement recherché les

181
00:08:14,550 --> 00:08:16,950
‫visites et n'a trouvé exactement aucun enregistrement

182
00:08:16,950 --> 00:08:19,150
‫et donc, ces zéro enregistrement

183
00:08:19,150 --> 00:08:23,250
‫sont exactement ce que nous allons renvoyer avec le code HTTP 200.

184
00:08:23,250 --> 00:08:25,120
‫Très bien, donc encore une fois, je

185
00:08:25,120 --> 00:08:27,300
‫considère qu'il ne peut pas vraiment y avoir d'erreur

186
00:08:27,300 --> 00:08:29,610
‫lorsqu'un utilisateur demande toutes les visites à moins bien

187
00:08:29,610 --> 00:08:32,680
‫sûr qu'il y ait une défaillance dans la base de données ou

188
00:08:32,680 --> 00:08:33,850
‫quelque chose comme ça.

189
00:08:33,850 --> 00:08:35,210
‫Mais dans ce

190
00:08:35,210 --> 00:08:37,600
‫cas, Mongoose lancera alors automatiquement une erreur.

191
00:08:37,600 --> 00:08:40,950
‫D'accord, qui à son tour va être intercepté par notre

192
00:08:40,950 --> 00:08:42,920
‫fonction ou catchAsync et comme vous

193
00:08:42,920 --> 00:08:44,330
‫le savez déjà, géré

194
00:08:44,330 --> 00:08:47,510
‫dans notre gestionnaire d'erreurs global et comme vous le

195
00:08:47,510 --> 00:08:48,800
‫savez déjà,

196
00:08:48,800 --> 00:08:52,000
‫géré dans notre middleware de gestion des erreurs globales.

197
00:08:52,000 --> 00:08:55,640
‫Très bien, alors j'ai déjà dit ces mots tant de fois.

198
00:08:55,640 --> 00:08:57,717
‫Quoi qu'il en soit, j'espère que

199
00:08:57,717 --> 00:09:01,113
‫cela avait du sens et donc, ouais, passons maintenant à autre chose.

