﻿1
00:00:01,100 --> 00:00:02,750
‫Enseignant : Dans cette

2
00:00:02,750 --> 00:00:05,470
‫vidéo, créons maintenant une classe d'erreurs meilleure et plus

3
00:00:05,470 --> 00:00:07,373
‫utile, et effectuons également une refactorisation.

4
00:00:09,210 --> 00:00:11,870
‫Et en commençant par cette classe

5
00:00:11,870 --> 00:00:15,053
‫d'erreur, créons un nouveau fichier dans notre dossier Utilitaires.

6
00:00:15,950 --> 00:00:18,990
‫Alors, nouveau fichier, et je vais l'appeler

7
00:00:20,980 --> 00:00:25,820
‫AppError parce que ça va être le nom de la classe, d'accord ?

8
00:00:25,820 --> 00:00:30,820
‫Donc, classe AppError, et nous voulons en fait que tous nos

9
00:00:30,867 --> 00:00:34,780
‫objets AppError héritent ensuite de l'erreur intégrée,

10
00:00:34,780 --> 00:00:39,260
‫et étendons donc en fait la classe d'erreur intégrée.

11
00:00:39,260 --> 00:00:43,720
‫Donc, nous avons utilisé l'extension Error, d'accord ?

12
00:00:43,720 --> 00:00:46,870
‫Donc, nous l'avons déjà fait quelque part dans ce cours,

13
00:00:46,870 --> 00:00:50,950
‫et encore une fois, ce ne sont que des cours ES6, d'accord ?

14
00:00:50,950 --> 00:00:52,920
‫Dans ce cas, l'héritage

15
00:00:52,920 --> 00:00:56,790
‫de classe, où une classe hérite de l'autre, d'accord ?

16
00:00:56,790 --> 00:00:59,300
‫Ensuite, comme toujours, notre constructeur, et ce

17
00:00:59,300 --> 00:01:01,800
‫que nous allons passer dans un

18
00:01:01,800 --> 00:01:04,490
‫nouvel objet créé à partir de la

19
00:01:04,490 --> 00:01:08,660
‫classe AppError, va être le message et le statusCode, donc juste

20
00:01:08,660 --> 00:01:09,853
‫ces deux.

21
00:01:11,330 --> 00:01:15,130
‫Bon, alors, rappelez-vous que la méthode constructeur est appelée chaque

22
00:01:15,130 --> 00:01:19,210
‫fois que nous créons un nouvel objet à partir de cette classe.

23
00:01:19,210 --> 00:01:22,116
‫Maintenant, comme d'habitude, lorsque nous étendons

24
00:01:22,116 --> 00:01:25,760
‫une classe parent, nous appelons super afin d'appeler le

25
00:01:25,760 --> 00:01:28,203
‫constructeur parent, d'accord, et nous

26
00:01:30,100 --> 00:01:33,580
‫le faisons avec message car le message est

27
00:01:33,580 --> 00:01:37,160
‫en fait le seul paramètre que l'erreur intégrée accepte.

28
00:01:37,160 --> 00:01:40,990
‫D'accord, donc c'est fondamentalement que vous appelez une

29
00:01:40,990 --> 00:01:44,305
‫erreur, d'accord, et puis voici les

30
00:01:44,305 --> 00:01:46,160
‫choses habituelles, nous

31
00:01:48,300 --> 00:01:53,030
‫définissons le statusCode sur statusCode, d'accord, et maintenant nous

32
00:01:53,030 --> 00:01:56,463
‫voulons également définir le statut lui-même.

33
00:01:58,200 --> 00:02:01,670
‫Donc, rappelez-vous que le statut peut être soit un échec, soit une

34
00:02:01,670 --> 00:02:03,920
‫erreur, et nous pourrions le transmettre à

35
00:02:03,920 --> 00:02:05,700
‫l'objet, mais ce n'est pas

36
00:02:05,700 --> 00:02:08,530
‫non plus vraiment nécessaire, car le statut dépend du statusCode.

37
00:02:08,530 --> 00:02:10,880
‫Ainsi, lorsque le statusCode est un 400,

38
00:02:10,880 --> 00:02:12,630
‫alors le statut sera

39
00:02:12,630 --> 00:02:16,230
‫fail, et s'il s'agit d'un 500, alors ce sera une erreur,

40
00:02:16,230 --> 00:02:18,336
‫n'est-ce pas, et cela teste simplement si

41
00:02:18,336 --> 00:02:20,420
‫le statusCode commence par un quatre.

42
00:02:20,420 --> 00:02:23,800
‫Donc, en JavaScript, il existe une méthode startWith que nous pouvons appeler

43
00:02:23,800 --> 00:02:25,540
‫sur des chaînes, et je

44
00:02:25,540 --> 00:02:28,100
‫pense donc que c'est la façon la plus simple

45
00:02:28,100 --> 00:02:31,363
‫de faire ce test, et c'est donc essentiellement convertir le statusCode

46
00:02:32,780 --> 00:02:35,610
‫en chaîne, et pour cela j'utilise simplement un chaîne de

47
00:02:35,610 --> 00:02:38,030
‫modèle avec le code là-dedans, donc ceci, ou

48
00:02:38,030 --> 00:02:40,380
‫en fait, nous pouvons simplement utiliser statusCode.

49
00:02:41,781 --> 00:02:42,614
‫Donc, statusCode,

50
00:02:47,001 --> 00:02:48,750
‫puis startsWith, alors ici nous avons aussi

51
00:02:48,750 --> 00:02:51,120
‫besoin d'une chaîne, et donc si le statusCode en tant

52
00:02:51,120 --> 00:02:54,330
‫que chaîne commence par un quatre, eh bien, alors nous avons un échec.

53
00:02:54,330 --> 00:02:58,360
‫Et donc ici, utilisons le ternaire, d'accord, et

54
00:02:58,360 --> 00:03:02,120
‫donc c'est un échec quand il commence

55
00:03:02,120 --> 00:03:06,890
‫par un quatre, et sinon c'est une erreur, d'accord ?

56
00:03:06,890 --> 00:03:09,550
‫Donc, très simple, et cela nous évite

57
00:03:09,550 --> 00:03:13,250
‫déjà d'avoir à transmettre manuellement soit un échec, soit une erreur.

58
00:03:13,250 --> 00:03:15,240
‫Très bien, maintenant, toutes les erreurs

59
00:03:15,240 --> 00:03:17,120
‫que nous allons créer

60
00:03:17,120 --> 00:03:20,300
‫en utilisant cette classe seront toutes des erreurs opérationnelles.

61
00:03:20,300 --> 00:03:22,070
‫Ainsi, des erreurs que nous

62
00:03:22,070 --> 00:03:24,130
‫pouvons prédire se produiront à un moment

63
00:03:24,130 --> 00:03:26,010
‫donné dans le futur, comme par exemple

64
00:03:26,010 --> 00:03:29,560
‫un utilisateur créant une visite sans les champs requis, n'est-ce pas ?

65
00:03:29,560 --> 00:03:32,380
‫C'est donc une erreur opérationnelle, d'accord, et encore une

66
00:03:32,380 --> 00:03:34,660
‫fois, à partir de maintenant, nous

67
00:03:34,660 --> 00:03:37,125
‫utiliserons toujours cette classe AppError ici que

68
00:03:37,125 --> 00:03:39,070
‫nous créons en ce moment

69
00:03:39,070 --> 00:03:42,230
‫afin de créer toutes les erreurs dans notre application.

70
00:03:42,230 --> 00:03:44,730
‫Et donc ces erreurs seront des erreurs opérationnelles, et donc ce

71
00:03:44,730 --> 00:03:46,250
‫que je vais faire maintenant

72
00:03:46,250 --> 00:03:49,663
‫est de créer également un fichier . est la propriété opérationnelle ici.

73
00:03:50,980 --> 00:03:53,133
‫Donc ça. est opérationnel

74
00:03:56,100 --> 00:03:57,380
‫et définissez-le sur true.

75
00:03:57,380 --> 00:03:59,240
‫Ainsi, toutes nos erreurs auront

76
00:03:59,240 --> 00:04:01,680
‫cette propriété définie sur true, et je

77
00:04:01,680 --> 00:04:03,420
‫le fais pour que

78
00:04:03,420 --> 00:04:05,890
‫nous puissions ensuite tester cette propriété et renvoyer

79
00:04:05,890 --> 00:04:07,910
‫des messages d'erreur au client uniquement

80
00:04:07,910 --> 00:04:10,360
‫pour ces erreurs opérationnelles que nous avons

81
00:04:10,360 --> 00:04:12,510
‫créées à l'aide de cette classe.

82
00:04:12,510 --> 00:04:14,550
‫Et cela est utile car d'autres

83
00:04:14,550 --> 00:04:17,210
‫erreurs inattendues et folles peuvent se produire dans

84
00:04:17,210 --> 00:04:19,964
‫notre application, par exemple une erreur de programmation

85
00:04:19,964 --> 00:04:22,360
‫ou un bogue dans l'un des packages

86
00:04:22,360 --> 00:04:24,550
‫dont nous avons besoin dans notre application,

87
00:04:24,550 --> 00:04:26,100
‫et ces erreurs

88
00:04:26,100 --> 00:04:29,610
‫n'auront bien sûr pas ceci. est une propriété opérationnelle

89
00:04:29,610 --> 00:04:31,610
‫sur eux, d'accord, et cela peut sembler

90
00:04:31,610 --> 00:04:33,370
‫un peu déroutant à ce stade,

91
00:04:33,370 --> 00:04:35,220
‫mais ne vous inquiétez pas, cela

92
00:04:35,220 --> 00:04:37,040
‫aura beaucoup de sens lorsque nous

93
00:04:37,040 --> 00:04:39,860
‫implémenterons ensuite cette partie que je viens de mentionner.

94
00:04:39,860 --> 00:04:43,740
‫Alors, à tester pour ça. est la propriété opérationnelle ici.

95
00:04:43,740 --> 00:04:46,190
‫Très bien, et maintenant juste une dernière

96
00:04:46,190 --> 00:04:50,270
‫étape est que nous devons également capturer la trace de la pile.

97
00:04:50,270 --> 00:04:53,090
‫Maintenant, qu'est-ce que j'entends par trace de pile ?

98
00:04:53,090 --> 00:04:55,430
‫Et donc, permettez-moi de vous montrer cela,

99
00:04:55,430 --> 00:04:58,380
‫donc, de vous montrer ce qu'est la trace de la

100
00:04:58,380 --> 00:05:01,093
‫pile, et je vais donc l'enregistrer ici sur la console.

101
00:05:02,180 --> 00:05:05,053
‫Console. journal et erreur. stackTrace,

102
00:05:06,390 --> 00:05:10,350
‫donc chaque erreur obtient cette trace de pile, et

103
00:05:10,350 --> 00:05:13,370
‫en fait c'est juste une pile, d'accord.

104
00:05:13,370 --> 00:05:15,820
‫Alors errez. stack nous montrera

105
00:05:15,820 --> 00:05:17,743
‫essentiellement où l'erreur s'est produite.

106
00:05:19,320 --> 00:05:20,743
‫Alors laissez-moi exécuter ceci

107
00:05:22,450 --> 00:05:24,303
‫ici maintenant, et alors jetons un coup

108
00:05:26,420 --> 00:05:28,000
‫d'œil à cela, et cela

109
00:05:28,000 --> 00:05:31,290
‫nous donne ici l'erreur et ensuite aussi où c'est arrivé, d'accord ?

110
00:05:31,290 --> 00:05:33,040
‫Donc, dans ce cas ici,

111
00:05:33,040 --> 00:05:36,390
‫bien sûr, ajoutez app. js à la ligne 32.

112
00:05:36,390 --> 00:05:38,810
‫Alors, juste ici.

113
00:05:38,810 --> 00:05:40,470
‫C'est donc là que nous

114
00:05:40,470 --> 00:05:42,200
‫avons créé cette erreur, et elle se

115
00:05:42,200 --> 00:05:44,972
‫trouve donc maintenant dans notre trace de pile, et elle nous

116
00:05:44,972 --> 00:05:49,972
‫montre également l'intégralité de la pile d'appels ici, qui à la fin est à l'origine de cette erreur, d'accord ?

117
00:05:50,400 --> 00:05:52,440
‫Donc, nous voulons en quelque

118
00:05:52,440 --> 00:05:56,500
‫sorte préserver cela et en même temps ne pas ajouter cette méthode

119
00:05:56,500 --> 00:06:00,390
‫ici, ou cette classe, à cette piste de pile, d'accord ?

120
00:06:00,390 --> 00:06:02,350
‫Et encore une fois, cela semble un

121
00:06:02,350 --> 00:06:03,980
‫peu déroutant, je sais, mais dans

122
00:06:03,980 --> 00:06:06,359
‫ce cas, ce n'est pas vraiment important, tout ce

123
00:06:06,359 --> 00:06:09,100
‫qui compte, c'est que nous ajoutions simplement cette ligne de code

124
00:06:09,100 --> 00:06:11,873
‫ici, qui est Error. capturestackTrace, donc exactement

125
00:06:13,670 --> 00:06:16,160
‫ce que vous obtenez ici,

126
00:06:16,160 --> 00:06:19,490
‫et nous devons d'abord spécifier l'objet actuel,

127
00:06:19,490 --> 00:06:23,530
‫qui est celui-ci, puis la classe AppError elle-même, qui

128
00:06:23,530 --> 00:06:26,113
‫sera celle-ci. constructeur.

129
00:06:28,340 --> 00:06:31,220
‫D'accord, et ainsi, lorsqu'un nouvel objet est créé et

130
00:06:31,220 --> 00:06:34,361
‫qu'une fonction constructeur est appelée, cet appel de fonction n'apparaîtra

131
00:06:34,361 --> 00:06:36,388
‫pas dans la trace de

132
00:06:36,388 --> 00:06:38,863
‫la pile et ne la polluera pas.

133
00:06:40,240 --> 00:06:41,073
‫Très

134
00:06:42,250 --> 00:06:44,920
‫bien, plaçons-le ici, et

135
00:06:44,920 --> 00:06:48,280
‫oui, c'est donc notre classe AppError, et

136
00:06:48,280 --> 00:06:51,363
‫donc exportons-la maintenant à partir d'ici.

137
00:06:52,450 --> 00:06:56,443
‫Alors, module. exports est bien sûr l'AppError.

138
00:06:57,340 --> 00:07:00,367
‫Super, juste une question que vous pourriez avoir est « Pourquoi

139
00:07:00,367 --> 00:07:04,720
‫n'ai-je pas défini cela ? message égal au message? ' Eh bien,

140
00:07:04,720 --> 00:07:07,600
‫c'est juste parce qu'ici j'ai appelé la classe

141
00:07:07,600 --> 00:07:10,253
‫parent, à droite, et la classe parent

142
00:07:10,253 --> 00:07:13,380
‫est error, et tout ce que nous lui transmettons

143
00:07:13,380 --> 00:07:15,350
‫sera la propriété du message.

144
00:07:15,350 --> 00:07:16,860
‫Alors comme je te l'ai dit avant.

145
00:07:16,860 --> 00:07:20,880
‫Et donc, fondamentalement, ici, en effectuant cet appel parent, nous avons

146
00:07:20,880 --> 00:07:22,890
‫déjà défini la propriété message sur

147
00:07:22,890 --> 00:07:24,463
‫notre message entrant.

148
00:07:25,970 --> 00:07:28,500
‫Très bien, sauvegardez-le, et maintenant nous pouvons le fermer, nous

149
00:07:28,500 --> 00:07:29,653
‫n'en avons plus

150
00:07:30,770 --> 00:07:32,933
‫besoin, et ici nous allons juste l'importer ici.

151
00:07:34,621 --> 00:07:35,871
‫Const

152
00:07:38,980 --> 00:07:43,600
‫AppError, require, puis c'est dans utils,

153
00:07:43,600 --> 00:07:48,320
‫donc Utilities, et appError, d'accord, et

154
00:07:48,320 --> 00:07:51,423
‫maintenant allons-y et utilisons-le.

155
00:07:53,280 --> 00:07:55,070
‫Commentez ce morceau de code, et

156
00:07:55,070 --> 00:07:57,420
‫supprimez en fait celui que nous avions auparavant,

157
00:07:58,860 --> 00:08:00,210
‫et cela va

158
00:08:00,210 --> 00:08:02,650
‫maintenant créer l'erreur ici à l'intérieur du suivant.

159
00:08:02,650 --> 00:08:04,433
‫Donc, nouvelle AppError, puis le

160
00:08:06,600 --> 00:08:07,783
‫message, qui est

161
00:08:09,430 --> 00:08:10,793
‫celui-ci, et le

162
00:08:12,910 --> 00:08:14,023
‫code d'état.

163
00:08:15,620 --> 00:08:18,410
‫Bon, et l'échec, rappelez-vous, sera

164
00:08:18,410 --> 00:08:22,480
‫alors automatiquement compris, et donc supprimons tout cela, sauvegardons-le

165
00:08:22,480 --> 00:08:23,723
‫ici, et

166
00:08:25,320 --> 00:08:29,630
‫une fois de plus, testez ce mauvais itinéraire, et en

167
00:08:29,630 --> 00:08:32,940
‫effet nous obtenons toujours la même erreur,

168
00:08:32,940 --> 00:08:37,530
‫et nous obtenons également exactement la même trace de pile.

169
00:08:37,530 --> 00:08:40,280
‫D'accord, et enfin je veux

170
00:08:40,280 --> 00:08:43,550
‫aussi exporter ce middleware ici, d'accord ?

171
00:08:43,550 --> 00:08:45,260
‫Donc, fondamentalement, ce gestionnaire parce

172
00:08:45,260 --> 00:08:47,150
‫que dans le reste de la

173
00:08:47,150 --> 00:08:48,760
‫section, nous allons créer quelques

174
00:08:48,760 --> 00:08:51,700
‫fonctions différentes pour gérer différents types d'erreurs, et donc je

175
00:08:51,700 --> 00:08:53,280
‫veux que toutes ces

176
00:08:53,280 --> 00:08:55,912
‫fonctions soient toutes dans le même fichier, d'accord ?

177
00:08:55,912 --> 00:08:58,920
‫Et nous pouvons dire que toutes ces fonctions

178
00:08:58,920 --> 00:09:02,310
‫que je viens de mentionner sont des gestionnaires, d'accord, et

179
00:09:02,310 --> 00:09:05,320
‫donc des gestionnaires, nous les appelons également des

180
00:09:05,320 --> 00:09:08,240
‫contrôleurs dans le contexte de l'architecture MVC, et

181
00:09:08,240 --> 00:09:10,130
‫créons donc maintenant un

182
00:09:10,130 --> 00:09:13,253
‫fichier de contrôleur d'erreur dans notre dossier de contrôleur.

183
00:09:14,190 --> 00:09:18,280
‫D'accord, et cela peut sembler un peu bizarre parce que nous n'avons en

184
00:09:18,280 --> 00:09:21,330
‫fait pas de ressource d'erreur d'accord, et donc probablement certaines

185
00:09:22,200 --> 00:09:24,940
‫personnes ne seront pas d'accord avec moi pour dire

186
00:09:24,940 --> 00:09:26,923
‫que c'est le bon endroit, mais

187
00:09:28,540 --> 00:09:31,100
‫personnellement j'aime le faire comme ça parce qu'à

188
00:09:31,100 --> 00:09:32,520
‫en fin de

189
00:09:32,520 --> 00:09:34,910
‫compte, ces fonctions, elles sont un peu

190
00:09:34,910 --> 00:09:37,370
‫comme pour contrôler nos erreurs, d'accord, et donc

191
00:09:37,370 --> 00:09:39,570
‫pour moi au moins, il est

192
00:09:39,570 --> 00:09:43,140
‫logique d'appeler simplement cette fonction ici le contrôleur d'erreur, et ici je

193
00:09:43,140 --> 00:09:46,500
‫voulais coller cette fonction middleware , mais je suppose que je

194
00:09:46,500 --> 00:09:49,173
‫ne l'ai pas copié, alors faisons-le à nouveau.

195
00:09:51,010 --> 00:09:53,540
‫Très bien, et en fait, je vais exporter celui-ci ici

196
00:09:53,540 --> 00:09:56,240
‫en tant que module. exporte parce que

197
00:09:56,240 --> 00:09:57,676
‫les autres fonctions de

198
00:09:57,676 --> 00:09:59,606
‫gestion que nous allons créer plus

199
00:09:59,606 --> 00:10:02,440
‫tard, je ne les exporterai pas à partir d'ici.

200
00:10:02,440 --> 00:10:05,453
‫Donc, ils vont juste être en quelque sorte des aides.

201
00:10:06,320 --> 00:10:11,320
‫Alors, module. exportations est égal à cette fonction, d'accord ?

202
00:10:12,210 --> 00:10:15,420
‫Débarrassons-nous réellement de cette console. connectez-vous ici, sauvegardez-le,

203
00:10:15,420 --> 00:10:18,510
‫et maintenant de retour dans notre application,

204
00:10:18,510 --> 00:10:21,080
‫nous devons bien sûr maintenant brancher

205
00:10:21,080 --> 00:10:23,040
‫cette fonction middleware ici.

206
00:10:23,040 --> 00:10:25,660
‫Alors, allons de l'avant et importons-le et

207
00:10:26,700 --> 00:10:28,710
‫je peux l'appeler comme je

208
00:10:28,710 --> 00:10:29,760
‫veux,

209
00:10:30,802 --> 00:10:32,635
‫et laissez-moi donc l'appeler

210
00:10:34,679 --> 00:10:36,853
‫le globalErrorHandler avec un H

211
00:10:38,650 --> 00:10:39,840
‫majuscule, et je

212
00:10:42,300 --> 00:10:45,033
‫vais avoir besoin de contrôleurs et d'errorController.

213
00:10:49,700 --> 00:10:52,660
‫Remettez-le ici, et maintenant pour le test final

214
00:10:52,660 --> 00:10:54,343
‫après cette refactorisation.

215
00:10:55,810 --> 00:10:58,970
‫Voyons voir, et encore une

216
00:10:58,970 --> 00:11:03,040
‫fois, tout fonctionne très bien, d'accord ?

217
00:11:03,040 --> 00:11:06,490
‫Alors, parfait, c'était le but de cette vidéo, à bientôt

218
00:11:06,490 --> 00:11:07,690
‫dans la suivante.

