﻿1
00:00:00,920 --> 00:00:02,913
‫- : Ainsi, comme je

2
00:00:02,913 --> 00:00:05,243
‫l'ai mentionné dans la dernière vidéo, il

3
00:00:05,243 --> 00:00:07,525
‫existe trois types d'erreurs pouvant être

4
00:00:07,525 --> 00:00:10,520
‫créées par Mongoose dans lesquelles nous devons marquer comme

5
00:00:10,520 --> 00:00:13,700
‫erreurs opérationnelles afin de pouvoir renvoyer des messages d'erreur significatifs

6
00:00:13,700 --> 00:00:15,383
‫aux clients en production.

7
00:00:16,890 --> 00:00:21,290
‫Et commençons maintenant par simuler ces trois erreurs, d'accord ?

8
00:00:21,290 --> 00:00:25,263
‫Donc, le premier est lorsque nous essayons un ID invalide ici,

9
00:00:26,240 --> 00:00:28,180
‫donc simplement quelque chose

10
00:00:28,180 --> 00:00:30,950
‫comme ça, et donc Mongoose ne pourra pas

11
00:00:30,950 --> 00:00:33,427
‫le convertir en un ID MongoDB, souvenez-vous-en.

12
00:00:33,427 --> 00:00:36,799
‫Et c'est donc l'erreur que nous obtenons en ce moment, et en

13
00:00:36,799 --> 00:00:39,650
‫fait, ici vous pouvez voir tout le genre de

14
00:00:39,650 --> 00:00:42,950
‫choses que nous avons définies que nous voulions voir dans les productions.

15
00:00:42,950 --> 00:00:47,010
‫Donc tout l'objet d'erreur, puis le message d'erreur,

16
00:00:47,010 --> 00:00:50,590
‫et aussi la pile complète, d'accord ?

17
00:00:50,590 --> 00:00:53,180
‫Et c'est donc un parfait exemple

18
00:00:53,180 --> 00:00:54,500
‫d'erreur opérationnelle.

19
00:00:54,500 --> 00:00:57,160
‫C'est donc quelque chose qui pourrait très

20
00:00:57,160 --> 00:01:00,060
‫bien arriver, et nous devons donc renvoyer une réponse

21
00:01:00,060 --> 00:01:02,380
‫significative afin de gérer cette erreur.

22
00:01:02,380 --> 00:01:05,590
‫Et c'est un exemple parfait d'une erreur opérationnelle qui est très

23
00:01:05,590 --> 00:01:09,260
‫susceptible d'arriver à un moment donné à un client, et donc, nous devons

24
00:01:09,260 --> 00:01:11,740
‫la gérer comme une seule, d'accord ?

25
00:01:11,740 --> 00:01:14,607
‫Donc, en gros en envoyant un joli message d'erreur au

26
00:01:14,607 --> 00:01:16,690
‫lieu de quelque chose comme ça,

27
00:01:16,690 --> 00:01:20,181
‫ce qui ne veut rien dire pour aucun client, n'est-ce pas ?

28
00:01:20,181 --> 00:01:22,500
‫D'accord, le but ici encore

29
00:01:22,500 --> 00:01:26,120
‫sera de marquer cette erreur comme opérationnelle et de

30
00:01:26,120 --> 00:01:28,880
‫créer un message significatif, d'accord ?

31
00:01:28,880 --> 00:01:30,580
‫Mais avant de pouvoir le

32
00:01:30,580 --> 00:01:32,620
‫faire, examinons les deux autres erreurs

33
00:01:32,620 --> 00:01:36,260
‫de Mongoose que nous devrons également marquer comme opérationnelles, d'accord ?

34
00:01:36,260 --> 00:01:38,457
‫Alors, créons une nouvelle tournée,

35
00:01:38,457 --> 00:01:43,236
‫et ce que je vais faire, c'est créer un nom en double.

36
00:01:43,236 --> 00:01:46,210
‫Alors, copions simplement celui-ci ici.

37
00:01:50,347 --> 00:01:52,503
‫Et je pense que toutes les

38
00:01:52,503 --> 00:01:54,780
‫valeurs ici sont correctes, alors essayons cela maintenant.

39
00:01:54,780 --> 00:01:58,520
‫Et en effet, ici, nous obtenons l'erreur que nous connaissons déjà, qui

40
00:01:58,520 --> 00:02:00,210
‫est une erreur de clé

41
00:02:00,210 --> 00:02:01,960
‫en double car nous avons déjà

42
00:02:01,960 --> 00:02:05,740
‫une tournée, ou un document avec le nom de Forest Hiker, d'accord ?

43
00:02:05,740 --> 00:02:07,440
‫Encore une fois, c'est une erreur

44
00:02:07,440 --> 00:02:09,420
‫qui va se produire à un moment donné,

45
00:02:09,420 --> 00:02:10,720
‫et encore une fois,

46
00:02:10,720 --> 00:02:13,650
‫il n'y a pas de message d'erreur très significatif, n'est-ce pas ?

47
00:02:13,650 --> 00:02:16,243
‫Et encore une fois, nous devons changer cela.

48
00:02:17,200 --> 00:02:19,954
‫Ensuite, le troisième concerne également

49
00:02:19,954 --> 00:02:23,980
‫la validation, et faisons-le donc ici dans Update Tour.

50
00:02:23,980 --> 00:02:27,835
‫Alors, disons que nous voulons avoir une note moyenne de six,

51
00:02:27,835 --> 00:02:30,700
‫ce que nous savons être invalide, non ?

52
00:02:30,700 --> 00:02:33,430
‫Parce que nous avons dit que le maximum de notes

53
00:02:33,430 --> 00:02:34,960
‫moyennes pourrait être de cinq.

54
00:02:34,960 --> 00:02:36,720
‫Voyons donc, et

55
00:02:36,720 --> 00:02:40,891
‫en effet, nous obtenons cette ValidationError, n'est-ce pas ?

56
00:02:40,891 --> 00:02:43,300
‫Cela s'appelle donc ValidationError, et

57
00:02:43,300 --> 00:02:47,600
‫il a cet objet d'erreurs avec toutes les erreurs.

58
00:02:47,600 --> 00:02:49,400
‫Mettons-en un autre ici.

59
00:02:51,377 --> 00:02:53,183
‫Alors disons difficulté,

60
00:02:55,229 --> 00:02:57,110
‫et puis autre chose, donc

61
00:02:57,110 --> 00:02:59,981
‫un qui n'est pas facile, moyen ou

62
00:02:59,981 --> 00:03:03,540
‫difficile, et maintenant nous obtenons ces deux objets ici.

63
00:03:03,540 --> 00:03:08,090
‫Un pour les notes et un pour la difficulté, d'accord ?

64
00:03:08,090 --> 00:03:09,800
‫Ce sont donc les

65
00:03:09,800 --> 00:03:11,740
‫trois erreurs que nous allons

66
00:03:11,740 --> 00:03:14,110
‫marquer comme opérationnelles, en commençant par

67
00:03:14,110 --> 00:03:17,540
‫la première, donc en gros, le type CastError, d'accord ?

68
00:03:17,540 --> 00:03:20,250
‫Alors, revenons ici, et nous allons le faire ici,

69
00:03:20,250 --> 00:03:24,260
‫encore une fois, parce que nous ne voulons le faire qu'en production, d'accord ?

70
00:03:24,260 --> 00:03:26,570
‫Dans le développement, nous ne nous soucions pas de tout cela.

71
00:03:26,570 --> 00:03:28,576
‫Tout ce que nous voulons

72
00:03:28,576 --> 00:03:30,910
‫faire, c'est voir nos erreurs afin de pouvoir

73
00:03:30,910 --> 00:03:33,220
‫les corriger, mais en production, c'est là

74
00:03:33,220 --> 00:03:36,110
‫que nous voulons envoyer les messages d'erreur significatifs aux clients.

75
00:03:36,110 --> 00:03:40,690
‫Alors, disons si vous vous trompez. name est égal

76
00:03:40,690 --> 00:03:45,690
‫à CastError, et c'est ainsi que nous allons identifier ce

77
00:03:45,980 --> 00:03:48,400
‫type d'erreur ici dont

78
00:03:48,400 --> 00:03:51,000
‫nous venons de parler, car

79
00:03:51,000 --> 00:03:55,300
‫il porte le nom de CastError, d'accord ?

80
00:03:55,300 --> 00:03:57,564
‫Donc si erreur. le nom

81
00:03:57,564 --> 00:04:02,230
‫est CastError, alors nous allons appeler une fonction spéciale que nous

82
00:04:02,230 --> 00:04:03,880
‫allons créer dans

83
00:04:03,880 --> 00:04:06,097
‫une seconde, qui s'appelle handleCastError.

84
00:04:10,750 --> 00:04:14,290
‫Et puis je vais aussi dire ici DB pour base de données,

85
00:04:14,290 --> 00:04:18,320
‫afin que nous sachions que cela est lié à notre base de données, d'accord ?

86
00:04:18,320 --> 00:04:19,920
‫Et c'est comme ça que ça va fonctionner.

87
00:04:19,920 --> 00:04:21,470
‫Nous allons transmettre l'erreur

88
00:04:21,470 --> 00:04:23,683
‫que Mongoose a créée dans cette

89
00:04:24,720 --> 00:04:27,070
‫fonction, donc juste comme ça, et cela

90
00:04:27,070 --> 00:04:30,840
‫renverra ensuite une nouvelle erreur créée sans la classe AppError, d'accord ?

91
00:04:30,840 --> 00:04:33,930
‫Et cette erreur sera alors marquée comme opérationnelle,

92
00:04:33,930 --> 00:04:36,120
‫car rappelez-vous, toutes nos erreurs d'application

93
00:04:36,120 --> 00:04:38,030
‫ont les propriétés opérationnelles

94
00:04:38,030 --> 00:04:40,523
‫définies automatiquement sur deux, n'est-ce pas ?

95
00:04:41,820 --> 00:04:46,390
‫Cela renverra donc une erreur, et donc, gardons cela, d'accord ?

96
00:04:46,390 --> 00:04:49,260
‫Et ainsi gardaient cela par erreur.

97
00:04:49,260 --> 00:04:51,050
‫Maintenant, ce n'est pas du

98
00:04:51,050 --> 00:04:54,700
‫tout une bonne pratique de remplacer les arguments d'une fonction, d'accord ?

99
00:04:54,700 --> 00:04:57,930
‫L'erreur vient donc de cette fonction d'erreur du milieu, n'est-ce pas ?

100
00:04:57,930 --> 00:05:01,020
‫Donc, à partir d'ici, et au lieu de faire

101
00:05:01,020 --> 00:05:03,217
‫ça, je vais en fait

102
00:05:03,217 --> 00:05:06,516
‫créer une copie papier de cet objet d'erreur, d'accord ?

103
00:05:06,516 --> 00:05:09,760
‫Alors let, et j'utilise let, et non const, car nous

104
00:05:09,760 --> 00:05:11,700
‫allons bien sûr réaffecter

105
00:05:11,700 --> 00:05:14,043
‫une nouvelle erreur ensuite, plus tard ici.

106
00:05:15,490 --> 00:05:18,820
‫Appelons donc cette erreur au lieu de simplement

107
00:05:18,820 --> 00:05:22,250
‫err, qui est le nom normal des erreurs dans Express.

108
00:05:22,250 --> 00:05:24,710
‫Et encore une fois, nous allons

109
00:05:24,710 --> 00:05:29,133
‫utiliser notre astuce où nous utilisons la déstructuration de l'erreur d'origine, d'accord ?

110
00:05:30,930 --> 00:05:34,257
‫Et donc, à partir de maintenant, nous utiliserons cette erreur au lieu de err.

111
00:05:35,620 --> 00:05:38,963
‫Alors ici, et ici, et ici.

112
00:05:41,720 --> 00:05:42,770
‫Bien?

113
00:05:42,770 --> 00:05:44,890
‫Et donc, allons de l'avant

114
00:05:44,890 --> 00:05:47,223
‫et créons réellement cette fonction ici.

115
00:05:49,580 --> 00:05:52,883
‫Mettons donc cela ici dès le début.

116
00:05:56,247 --> 00:05:57,413
‫Bien.

117
00:05:58,270 --> 00:06:00,680
‫Essayez de vous rappeler que cela reçoit

118
00:06:00,680 --> 00:06:04,210
‫une erreur, et maintenant je vais simplement l'appeler err comme ceci, car

119
00:06:04,210 --> 00:06:07,320
‫encore une fois, c'est un peu la norme dans Express.

120
00:06:07,320 --> 00:06:09,020
‫Et pour commencer,

121
00:06:09,020 --> 00:06:12,910
‫examinons à nouveau l'objet d'erreur ici, d'accord ?

122
00:06:12,910 --> 00:06:17,910
‫Donc ici, nous avons le chemin, et nous avons aussi la valeur, d'accord ?

123
00:06:18,290 --> 00:06:21,280
‫Donc, le chemin ici est essentiellement le nom du

124
00:06:21,280 --> 00:06:25,000
‫champ pour lequel les données d'entrée sont au mauvais format, d'accord ?

125
00:06:25,000 --> 00:06:27,860
‫Et cette valeur ici est alors celle-ci, qui

126
00:06:27,860 --> 00:06:31,050
‫est, bien sûr, celle que nous avons passée, d'accord ?

127
00:06:31,050 --> 00:06:34,200
‫Donc, cela peut non seulement se produire pour l'ID, mais

128
00:06:34,200 --> 00:06:36,450
‫vraiment, pour tout champ que nous

129
00:06:36,450 --> 00:06:39,370
‫recherchons avec une valeur dans le mauvais format, d'accord ?

130
00:06:39,370 --> 00:06:41,270
‫Et donc, créons maintenant

131
00:06:41,270 --> 00:06:43,330
‫une chaîne qui dit que nous

132
00:06:43,330 --> 00:06:48,330
‫avons un ID invalide avec la valeur de celui-ci dans ce cas, d'accord ?

133
00:06:48,360 --> 00:06:53,360
‫Donc, c'est le chemin et la valeur, d'accord ?

134
00:06:53,530 --> 00:06:55,873
‫Alors, créons un message ici et disons

135
00:06:59,780 --> 00:07:01,770
‫Invalid err. le chemin est une

136
00:07:08,328 --> 00:07:09,411
‫erreur. valeur.

137
00:07:13,870 --> 00:07:15,250
‫D'accord?

138
00:07:15,250 --> 00:07:17,813
‫Et maintenant, nous renvoyons simplement notre propre AppError.

139
00:07:18,990 --> 00:07:20,227
‫D'accord?

140
00:07:20,227 --> 00:07:24,270
‫Alors comme je l'ai mentionné plusieurs fois maintenant, d'accord ?

141
00:07:24,270 --> 00:07:27,740
‫Donc AppError, et je dois en fait l'inclure ici, ou

142
00:07:27,740 --> 00:07:30,933
‫l'exiger, car je ne l'ai pas encore fait.

143
00:07:31,940 --> 00:07:35,633
‫Donc, const AppError est égal à require, et

144
00:07:39,150 --> 00:07:42,620
‫monte d'un niveau, puis dans le dossier

145
00:07:42,620 --> 00:07:45,213
‫des utilitaires, puis dans appError.

146
00:07:46,350 --> 00:07:47,183
‫C'est ici.

147
00:07:48,150 --> 00:07:52,570
‫Et maintenant, dans ou AppError, nous passons notre message et

148
00:07:52,570 --> 00:07:56,860
‫le code d'état 400, qui signifie Bad Request.

149
00:07:56,860 --> 00:07:59,040
‫D'accord, et juste comme ça, nous

150
00:07:59,040 --> 00:08:00,940
‫transformons l'erreur étrange que nous

151
00:08:00,940 --> 00:08:02,640
‫recevions de Mongoose en

152
00:08:02,640 --> 00:08:04,110
‫une erreur opérationnelle

153
00:08:04,110 --> 00:08:06,354
‫avec un joli message amical qu'un

154
00:08:06,354 --> 00:08:07,187
‫humain

155
00:08:07,187 --> 00:08:09,343
‫réel peut lire, d'accord ?

156
00:08:10,684 --> 00:08:13,270
‫D'accord, une dernière chose que nous

157
00:08:13,270 --> 00:08:18,150
‫devons changer ici est de définir également celle-ci ici sur erreur, d'accord ?

158
00:08:18,150 --> 00:08:21,750
‫Et donc, tout de suite, si notre erreur est CastError,

159
00:08:21,750 --> 00:08:24,770
‫eh bien, on va alors passer l'erreur dans

160
00:08:24,770 --> 00:08:27,790
‫cette fonction qui va retourner notre AppError, donc

161
00:08:27,790 --> 00:08:31,430
‫celle-ci, et c'est celle qui sera ensuite envoyée au client

162
00:08:31,430 --> 00:08:34,180
‫à l'aide de notre sendErrorProd, d'accord?

163
00:08:34,180 --> 00:08:36,123
‫Et donc, essayons maintenant cela.

164
00:08:37,080 --> 00:08:39,060
‫Alors ici, dans notre package. json,

165
00:08:39,060 --> 00:08:43,627
‫nous avons ce script start:prod, alors essayons cela.

166
00:08:43,627 --> 00:08:48,627
‫Donc, npm lance start:prod, et je peux en fait compléter automatiquement ces noms de

167
00:08:50,250 --> 00:08:54,580
‫script npm en utilisant l'onglet ici dans le terminal, d'accord ?

168
00:08:54,580 --> 00:08:56,420
‫Et donc, cela va démarrer

169
00:08:56,420 --> 00:08:59,640
‫un processus en mode production, en gros, d'accord ?

170
00:08:59,640 --> 00:09:01,060
‫Et donc, essayons maintenant à nouveau.

171
00:09:01,060 --> 00:09:02,580
‫Donc, si vous faites maintenant cette

172
00:09:02,580 --> 00:09:04,350
‫demande, nous devrions récupérer le message d'erreur

173
00:09:04,350 --> 00:09:07,500
‫que nous venons de créer, car en ce moment, nous sommes en production.

174
00:09:07,500 --> 00:09:10,060
‫Et en effet, le voici.

175
00:09:10,060 --> 00:09:12,530
‫Nous avons donc invalide, puis le nom du champ, ou

176
00:09:12,530 --> 00:09:15,010
‫en fait le nom du chemin, puis la valeur que

177
00:09:15,010 --> 00:09:15,843
‫nous avons insérée.

178
00:09:17,130 --> 00:09:19,194
‫Donc, si nous essayons quelque

179
00:09:19,194 --> 00:09:21,730
‫chose de différent, alors bien sûr, nous

180
00:09:21,730 --> 00:09:25,450
‫obtenons ceci, et bien sûr, également notre code 400 Bad Request.

181
00:09:25,450 --> 00:09:26,650
‫D'accord génial.

182
00:09:26,650 --> 00:09:28,533
‫Donc, celui-ci est maintenant géré.

183
00:09:28,533 --> 00:09:32,210
‫Dans le prochain cours, nous nous occuperons du suivant, qui concerne

184
00:09:32,210 --> 00:09:35,440
‫les noms de champs en double, d'accord ?

185
00:09:35,440 --> 00:09:36,890
‫Alors, à bientôt dans une seconde.

