﻿1
00:00:01,150 --> 00:00:03,310
‫Homme : Dans cette vidéo, nous allons

2
00:00:03,310 --> 00:00:06,080
‫maintenant implémenter le middleware global de gestion des erreurs dont

3
00:00:06,080 --> 00:00:07,483
‫nous venons de parler.

4
00:00:09,020 --> 00:00:11,280
‫N'oubliez donc pas que le

5
00:00:11,280 --> 00:00:13,650
‫but est d'écrire une fonction middleware,

6
00:00:13,650 --> 00:00:17,690
‫qui sera capable de gérer des erreurs opérationnelles comme celle-ci.

7
00:00:17,690 --> 00:00:22,010
‫D'accord, alors quand un utilisateur accède à une URL qui n'existe pas, alors

8
00:00:22,010 --> 00:00:24,890
‫qu'on peut considérer cela comme une erreur opérationnelle, et

9
00:00:24,890 --> 00:00:27,590
‫dans ce cas on s'en occupe en renvoyant

10
00:00:27,590 --> 00:00:29,630
‫cette réponse ici, non ?

11
00:00:29,630 --> 00:00:33,320
‫Mais encore une fois, l'objectif est de le faire dans un endroit central.

12
00:00:33,320 --> 00:00:37,200
‫Par exemple, nous avons des trucs similaires ici.

13
00:00:37,200 --> 00:00:39,870
‫Donc, partout ici, nous avons ces extraits

14
00:00:39,870 --> 00:00:41,950
‫ici, qui gèrent les erreurs.

15
00:00:41,950 --> 00:00:45,270
‫Nous devons donc supprimer le bloc etch ici, et s'il y

16
00:00:45,270 --> 00:00:47,460
‫a une erreur, eh bien, nous

17
00:00:47,460 --> 00:00:50,083
‫la traitons en envoyant cette erreur au client.

18
00:00:51,290 --> 00:00:53,520
‫Et encore une fois, à la fin,

19
00:00:53,520 --> 00:00:56,170
‫nous voulons nous débarrasser de tout cela et gérer

20
00:00:56,170 --> 00:00:57,900
‫l'erreur dans un middleware central.

21
00:00:57,900 --> 00:01:00,556
‫Et donc commençons maintenant par

22
00:01:00,556 --> 00:01:02,800
‫créer cette fonction middleware.

23
00:01:02,800 --> 00:01:05,470
‫Et dans Express, c'est en fait très simple.

24
00:01:05,470 --> 00:01:07,580
‫Rappelez-vous comment je vous ai dit qu'Express est

25
00:01:07,580 --> 00:01:09,540
‫déjà livré avec des gestionnaires de

26
00:01:09,540 --> 00:01:10,880
‫middleware prêts à l'emploi.

27
00:01:10,880 --> 00:01:15,720
‫Donc, comme toujours, nous commençons par utiliser app. use, d'accord, et puis

28
00:01:15,720 --> 00:01:19,210
‫ici, nous définissons notre fonction middleware.

29
00:01:19,210 --> 00:01:21,880
‫Ainsi, pour définir un middleware de

30
00:01:21,880 --> 00:01:24,870
‫gestion d'erreurs, il suffit de donner quatre arguments

31
00:01:24,870 --> 00:01:27,980
‫à la fonction middleware et Express le reconnaîtra alors

32
00:01:27,980 --> 00:01:30,740
‫automatiquement comme un middleware de gestion d'erreurs.

33
00:01:30,740 --> 00:01:33,653
‫Et donc, ne l'appelez qu'en cas d'erreur.

34
00:01:34,556 --> 00:01:38,220
‫Et donc, tout comme dans de nombreux autres cas,

35
00:01:38,220 --> 00:01:41,740
‫cette fonction middleware est une première fonction d'erreur, ce

36
00:01:41,740 --> 00:01:43,330
‫qui signifie que le

37
00:01:43,330 --> 00:01:44,483
‫premier argument

38
00:01:45,930 --> 00:01:50,563
‫est l'erreur, puis nous avons la demande, la réponse et la suivante.

39
00:01:51,975 --> 00:01:55,280
‫Ainsi, en spécifiant quatre paramètres, Express sait automatiquement que

40
00:01:55,280 --> 00:01:57,750
‫toute cette fonction ici est un

41
00:01:57,750 --> 00:02:00,150
‫middleware de gestion des erreurs.

42
00:02:00,150 --> 00:02:04,150
‫Implémentons maintenant le code de cette fonction ici et après cela, je

43
00:02:04,150 --> 00:02:06,400
‫vous montrerai comment nous pouvons réellement créer

44
00:02:06,400 --> 00:02:09,000
‫une erreur afin que cette fonction middleware soit

45
00:02:09,000 --> 00:02:09,930
‫réellement interceptée.

46
00:02:09,930 --> 00:02:13,450
‫Donc, en deux étapes, nous créons d'abord le middleware, puis dans

47
00:02:13,450 --> 00:02:15,130
‫la deuxième étape, nous

48
00:02:15,130 --> 00:02:18,700
‫allons réellement créer une erreur afin que cette fonction soit interceptée.

49
00:02:18,700 --> 00:02:20,943
‫Et pour l'instant, restons très simple ici.

50
00:02:20,943 --> 00:02:23,590
‫Donc, tout ce que nous voulons vraiment faire

51
00:02:23,590 --> 00:02:27,100
‫pour gérer cette erreur est de renvoyer une réponse au client.

52
00:02:27,100 --> 00:02:29,893
‫Donc rés. statut, mais maintenant nous

53
00:02:31,170 --> 00:02:35,100
‫ne savons pas vraiment de quel code de statut il s'agit, n'est-ce pas ?

54
00:02:35,100 --> 00:02:38,420
‫Ainsi, par exemple, dans ce cas, il s'agit d'un 404, mais

55
00:02:38,420 --> 00:02:41,650
‫nous avons ici des erreurs qui ont d'autres codes d'état.

56
00:02:41,650 --> 00:02:46,020
‫Comme nous avons un 400 par exemple pour une mauvaise demande,

57
00:02:46,020 --> 00:02:48,823
‫ou vraiment toutes sortes d'autres codes.

58
00:02:50,903 --> 00:02:53,142
‫Et donc nous voulons en fait lire

59
00:02:53,142 --> 00:02:56,113
‫ce code d'état à partir de l'objet d'erreur, d'accord ?

60
00:02:57,480 --> 00:02:59,650
‫Ainsi, lorsque nous créerons cette erreur un peu

61
00:02:59,650 --> 00:03:01,143
‫plus tard dans la deuxième

62
00:03:01,143 --> 00:03:04,504
‫étape, comme je vous l'ai dit, nous définirons ce code d'état sur l'erreur.

63
00:03:04,504 --> 00:03:08,943
‫Alors disons le code d'état, et maintenant je veux définir une valeur

64
00:03:10,533 --> 00:03:11,962
‫par défaut ici.

65
00:03:11,962 --> 00:03:14,620
‫Parce qu'il y aura des erreurs qui ne viendront

66
00:03:14,620 --> 00:03:17,090
‫pas de nous car il y aura des

67
00:03:17,090 --> 00:03:19,590
‫erreurs sans code d'état, donc des erreurs qui ne

68
00:03:19,590 --> 00:03:22,750
‫sont pas créées par nous, mais par exemple à d'autres endroits

69
00:03:22,750 --> 00:03:24,240
‫dans l'application de note.

70
00:03:24,240 --> 00:03:26,640
‫Et je sais que cela semble un peu déroutant pour le moment,

71
00:03:26,640 --> 00:03:28,770
‫mais vous le verrez tout au long de cette section.

72
00:03:28,770 --> 00:03:31,790
‫Pour l'instant, définissons simplement ce code de statut

73
00:03:31,790 --> 00:03:32,623
‫par défaut.

74
00:03:33,550 --> 00:03:36,959
‫Donc on dit que l'erreur. statuscode est

75
00:03:36,959 --> 00:03:40,446
‫égal à err. statuscode essentiellement s'il est défini

76
00:03:40,446 --> 00:03:45,230
‫ou le code 500, ce qui signifie encore une fois une erreur de

77
00:03:45,230 --> 00:03:48,140
‫serveur interne, et c'est donc généralement la norme

78
00:03:48,140 --> 00:03:49,763
‫que nous utilisons.

79
00:03:50,660 --> 00:03:54,820
‫Et de la même manière, nous définissons également le statut,

80
00:03:54,820 --> 00:03:59,820
‫donc disons erreur. le statut est égal à l'erreur. status s'il est

81
00:04:01,350 --> 00:04:03,713
‫défini, et sinon, c'est une

82
00:04:04,670 --> 00:04:05,760
‫erreur.

83
00:04:05,760 --> 00:04:10,120
‫Donc, l'erreur, rappelez-vous, c'est quand nous avons un code d'état 500 et si c'est

84
00:04:10,120 --> 00:04:13,033
‫un code d'état 400, alors c'est un échec.

85
00:04:13,926 --> 00:04:16,723
‫Ainsi, par exemple ici dans ce 404 , le statut est fail.

86
00:04:18,597 --> 00:04:20,960
‫Et maintenant, ici, nous

87
00:04:20,960 --> 00:04:25,960
‫pouvons ensuite l'utiliser, donc erreur. statuscode, puis envoyez du json, très similaire à

88
00:04:27,100 --> 00:04:29,363
‫ce que nous avons fait auparavant.

89
00:04:30,320 --> 00:04:34,830
‫Nous commençons donc par le statut et lisons cela à partir de l'erreur. statut et le

90
00:04:37,010 --> 00:04:40,473
‫message proviendra également de l'erreur.

91
00:04:41,380 --> 00:04:44,970
‫Alors errez. message et je vais vous montrer dans

92
00:04:44,970 --> 00:04:48,223
‫une seconde comment cette erreur. La propriété message ici est créée.

93
00:04:49,750 --> 00:04:52,700
‫D'accord, mais pour l'instant, il s'agit de notre middleware de gestion

94
00:04:52,700 --> 00:04:54,000
‫des erreurs très simple.

95
00:04:55,400 --> 00:04:58,190
‫Donc très simple, mais pour l'instant ça marche.

96
00:04:58,190 --> 00:05:00,200
‫Et maintenant, la deuxième étape, où nous

97
00:05:00,200 --> 00:05:01,830
‫créons réellement une erreur.

98
00:05:01,830 --> 00:05:03,680
‫Et alors faisons-le ici.

99
00:05:03,680 --> 00:05:06,270
‫Donc, ici même dans cette fonction, qui gère toutes

100
00:05:06,270 --> 00:05:08,820
‫les routes non gérées, alors laissez-moi commenter celle-ci

101
00:05:08,820 --> 00:05:11,833
‫ici et à la place, nous voulons créer une erreur.

102
00:05:12,973 --> 00:05:16,850
‫Alors disons const err et

103
00:05:18,080 --> 00:05:21,700
‫c'est une nouvelle erreur.

104
00:05:21,700 --> 00:05:24,840
‫Nous utilisons donc essentiellement le constructeur d'erreur intégré afin

105
00:05:24,840 --> 00:05:26,600
‫de créer une erreur.

106
00:05:26,600 --> 00:05:29,320
‫Et maintenant, nous pouvons passer une chaîne et cette

107
00:05:29,320 --> 00:05:31,900
‫chaîne sera alors la propriété du message d'erreur.

108
00:05:31,900 --> 00:05:35,163
‫Donc ce dont nous venons de parler ici.

109
00:05:37,350 --> 00:05:40,113
‫Donc ce message devrait être ce message.

110
00:05:42,920 --> 00:05:43,753
‫D'accord?

111
00:05:45,600 --> 00:05:49,600
‫Et puis il devrait dire err. statut qui

112
00:05:51,680 --> 00:05:52,693
‫est

113
00:05:55,830 --> 00:06:00,450
‫échec, puis erreur. statusCode est égal à 404.

114
00:06:00,450 --> 00:06:03,610
‫C'est donc ce que j'ai mentionné avant que nous puissions

115
00:06:03,610 --> 00:06:06,770
‫définir le code d'état et l'état sur l'objet d'erreur.

116
00:06:06,770 --> 00:06:09,010
‫Et c'est exactement ce que nous faisons ici.

117
00:06:09,010 --> 00:06:10,950
‫Nous créons une erreur et nous

118
00:06:10,950 --> 00:06:14,220
‫définissons ensuite le statut et les propriétés du code de statut afin

119
00:06:14,220 --> 00:06:15,930
‫que notre middleware de gestion

120
00:06:15,930 --> 00:06:18,150
‫des erreurs puisse les utiliser à l'étape suivante.

121
00:06:18,150 --> 00:06:20,840
‫Mais maintenant, comment lisons-nous réellement cette prochaine étape ?

122
00:06:20,840 --> 00:06:23,390
‫Alors ce prochain middleware.

123
00:06:23,390 --> 00:06:26,650
‫Eh bien, comme toujours, nous utilisons ensuite.

124
00:06:26,650 --> 00:06:29,430
‫Mais cette fois, nous utilisons ensuite d'une manière spéciale.

125
00:06:29,430 --> 00:06:32,100
‫Parce que maintenant nous devons réellement passer cette

126
00:06:32,100 --> 00:06:35,190
‫erreur dans next, donc si la fonction suivante reçoit un

127
00:06:35,190 --> 00:06:37,460
‫argument, peu importe ce que c'est, Express

128
00:06:37,460 --> 00:06:40,680
‫saura automatiquement qu'il y a eu une erreur donc il

129
00:06:40,680 --> 00:06:43,620
‫supposera que tout ce que nous passons dans next

130
00:06:43,620 --> 00:06:44,950
‫sera un Erreur.

131
00:06:44,950 --> 00:06:48,300
‫Et cela s'applique à chaque fonction suivante dans chaque

132
00:06:48,300 --> 00:06:50,803
‫middleware, n'importe où dans notre application.

133
00:06:51,950 --> 00:06:54,800
‫Encore une fois, chaque fois que nous passons quelque chose dans

134
00:06:54,800 --> 00:06:57,250
‫le suivant, il supposera qu'il s'agit d'une erreur, et

135
00:06:57,250 --> 00:06:59,670
‫il ignorera alors tous les autres middlewares de la

136
00:06:59,670 --> 00:07:02,250
‫pile middleware et enverra l'erreur que nous avons transmise à

137
00:07:02,250 --> 00:07:04,680
‫notre middleware global de gestion des erreurs, qui sera

138
00:07:04,680 --> 00:07:06,680
‫alors , bien sûr, être exécuté.

139
00:07:08,030 --> 00:07:10,090
‫Et donc passons maintenant dans

140
00:07:10,090 --> 00:07:12,350
‫l'erreur qui sautera à nouveau, tous les

141
00:07:12,350 --> 00:07:15,393
‫autres middlewares de la pile et irons directement à celui-ci.

142
00:07:16,850 --> 00:07:18,430
‫Dans ce cas, il n'y

143
00:07:18,430 --> 00:07:21,210
‫a en fait aucun autre middleware au milieu, d'accord ?

144
00:07:21,210 --> 00:07:23,060
‫Donc, c'est vraiment juste le suivant

145
00:07:23,060 --> 00:07:25,950
‫ici, mais si nous devions utiliser next et transmettre une erreur

146
00:07:25,950 --> 00:07:28,603
‫ailleurs, alors bien sûr, cela fonctionnera de la même manière.

147
00:07:29,720 --> 00:07:31,940
‫Et donc testons maintenant tout cela simplement

148
00:07:31,940 --> 00:07:35,077
‫en essayant d'accéder à une route qui n'a pas été définie.

149
00:07:35,077 --> 00:07:38,460
‫Et cela déclenchera alors tout ce code ici, passera au

150
00:07:38,460 --> 00:07:41,190
‫middleware de gestion des erreurs, puis renverra

151
00:07:41,190 --> 00:07:43,700
‫la réponse en fonction de toute cette

152
00:07:43,700 --> 00:07:44,773
‫logique ici.

153
00:07:47,420 --> 00:07:52,130
‫Donc, ici, nous avons toujours notre itinéraire erroné ou inexistant et

154
00:07:52,130 --> 00:07:55,220
‫commençons par appeler celui-ci, qui devrait toujours

155
00:07:55,220 --> 00:07:57,023
‫fonctionner, d'accord, alors juste

156
00:07:59,850 --> 00:08:01,650
‫pour confirmer que tout

157
00:08:01,650 --> 00:08:05,050
‫fonctionne très bien et que c'est le cas,

158
00:08:05,050 --> 00:08:06,810
‫et maintenant celui-ci.

159
00:08:06,810 --> 00:08:11,250
‫Et en effet, nous ne pouvons pas trouver de visites d'API sur ce serveur,

160
00:08:11,250 --> 00:08:13,810
‫et donc notre middleware global de gestion des

161
00:08:13,810 --> 00:08:15,560
‫erreurs fait réellement son travail.

162
00:08:15,560 --> 00:08:19,560
‫Parfait, c'est la première étape pour vraiment implémenter un

163
00:08:19,560 --> 00:08:22,370
‫mécanisme de gestion des erreurs bien meilleur

164
00:08:22,370 --> 00:08:24,200
‫dans notre application.

165
00:08:24,200 --> 00:08:26,830
‫Nous pourrions donc maintenant aller de l'avant et essayer

166
00:08:26,830 --> 00:08:29,460
‫d'implémenter ce genre de choses ici, partout dans tous

167
00:08:29,460 --> 00:08:30,310
‫nos gestionnaires.

168
00:08:30,310 --> 00:08:34,160
‫Par exemple, ici dans toutes ces fonctions que nous

169
00:08:34,160 --> 00:08:35,060
‫avons ici.

170
00:08:35,060 --> 00:08:37,410
‫Donc remplacer tout ce que nous avons ici

171
00:08:37,410 --> 00:08:38,850
‫avec ce genre d'erreur.

172
00:08:38,850 --> 00:08:41,460
‫Mais ce que je veux faire pour l'instant, c'est de

173
00:08:41,460 --> 00:08:42,920
‫créer notre propre classe d'erreurs.

174
00:08:42,920 --> 00:08:46,330
‫Pour que nous n'ayons pas à écrire tout ce code ici et

175
00:08:46,330 --> 00:08:49,280
‫que nous ayons à la place une classe plus rationalisée

176
00:08:49,280 --> 00:08:50,113
‫de nous-mêmes.

177
00:08:50,113 --> 00:08:53,350
‫C'est donc une pratique courante, et faisons-le dans la

178
00:08:53,350 --> 00:08:54,283
‫prochaine vidéo.

