﻿1
00:00:01,220 --> 00:00:03,730
‫- : Dans cette vidéo, créons

2
00:00:03,730 --> 00:00:06,333
‫un type spécial de middleware appelé param middleware.

3
00:00:07,920 --> 00:00:11,460
‫Ainsi, le middleware param est un middleware qui ne s'exécute

4
00:00:11,460 --> 00:00:13,940
‫que pour certains paramètres, donc fondamentalement,

5
00:00:13,940 --> 00:00:17,450
‫lorsque nous avons un certain paramètre dans notre URL.

6
00:00:17,450 --> 00:00:20,000
‫Maintenant, dans notre exemple ici, le seul

7
00:00:20,000 --> 00:00:25,000
‫paramètre que nous pourrions avoir dans notre URL de route est l'identifiant, n'est-ce pas ?

8
00:00:25,320 --> 00:00:28,120
‫Et donc nous pouvons écrire un middleware

9
00:00:28,120 --> 00:00:31,100
‫qui ne s'exécute que lorsque cet identifiant est présent

10
00:00:31,100 --> 00:00:34,570
‫dans l'URL, d'accord, alors laissez-moi vous montrer comment le faire.

11
00:00:34,570 --> 00:00:38,000
‫C'est assez simple en fait, donc c'est

12
00:00:39,690 --> 00:00:43,260
‫sur notre routeur et ensuite la méthode param, d'accord.

13
00:00:43,260 --> 00:00:46,210
‫Et donc ici, nous spécifions d'abord le

14
00:00:46,210 --> 00:00:48,890
‫paramètre que nous voulons réellement rechercher, donc

15
00:00:48,890 --> 00:00:50,900
‫fondamentalement le paramètre pour

16
00:00:50,900 --> 00:00:54,400
‫lequel ce middleware va s'exécuter, et il s'appelle id,

17
00:00:54,400 --> 00:00:57,333
‫puis bien sûr notre fonction middleware réelle.

18
00:00:59,060 --> 00:01:02,800
‫Et comme d'habitude, nous avons accès à la requête

19
00:01:02,800 --> 00:01:05,070
‫et à l'objet de

20
00:01:05,070 --> 00:01:07,350
‫réponse, puis détecte une fonction middleware

21
00:01:07,350 --> 00:01:10,300
‫également pour la fonction suivante, n'est-ce pas ?

22
00:01:10,300 --> 00:01:12,090
‫Maintenant, dans une fonction

23
00:01:12,090 --> 00:01:15,370
‫middleware param, nous avons en fait accès à un quatrième

24
00:01:15,370 --> 00:01:18,783
‫argument et celui-ci est la valeur du paramètre en question.

25
00:01:20,280 --> 00:01:23,553
‫Nous appelons donc généralement cela un val, qui représente la valeur.

26
00:01:26,240 --> 00:01:28,720
‫Et maintenant, nous pouvons continuer et simplement

27
00:01:28,720 --> 00:01:30,650
‫l'enregistrer sur la console,

28
00:01:30,650 --> 00:01:35,510
‫juste pour voir si cela fonctionne réellement, alors disons que l'identifiant de la

29
00:01:37,700 --> 00:01:40,410
‫tournée est, puis l'identifiant, n'est-ce pas ?

30
00:01:40,410 --> 00:01:43,840
‫Ensuite, nous devons également appeler le prochain, n'est-ce pas ?

31
00:01:43,840 --> 00:01:46,470
‫Parce que sinon, le cycle de réponse à

32
00:01:46,470 --> 00:01:48,970
‫la demande restera bloqué dans cette

33
00:01:48,970 --> 00:01:51,630
‫fonction middleware et il ne pourra pas passer

34
00:01:51,630 --> 00:01:54,570
‫au middleware suivant de la pile, n'est-ce pas ?

35
00:01:54,570 --> 00:01:56,903
‫Quelles seront ces routes ici.

36
00:01:57,860 --> 00:02:01,563
‫Très bien, alors sauvegardons-le et vérifions-le maintenant.

37
00:02:03,000 --> 00:02:05,260
‫Et nous voulons que ce ne soit

38
00:02:06,370 --> 00:02:10,100
‫pas pour tous les utilisateurs, mais pour un seul Tour, n'est-ce pas ?

39
00:02:10,100 --> 00:02:11,940
‫Eh bien, laissez-moi vous

40
00:02:11,940 --> 00:02:16,940
‫montrer d'abord ce qui se passe si nous n'avons pas d'identifiant, d'accord, et

41
00:02:17,020 --> 00:02:20,310
‫maintenant, nous ne voyons aucune connexion dans notre console.

42
00:02:20,310 --> 00:02:22,870
‫Mais si j'envoie maintenant la même requête

43
00:02:22,870 --> 00:02:26,843
‫sur cette route où nous avons l'identifiant, voyons ce qui se passe ensuite.

44
00:02:26,843 --> 00:02:29,610
‫Oh, ça me dit que id n'est pas

45
00:02:29,610 --> 00:02:33,500
‫défini, et en effet ce n'est pas id, donc c'était une erreur stupide.

46
00:02:33,500 --> 00:02:36,420
‫Donc c'est val pour la valeur, non?

47
00:02:36,420 --> 00:02:39,710
‫Alors rappelez-vous comment j'ai dit que ce paramètre de valeur

48
00:02:39,710 --> 00:02:41,500
‫est celui qui contiendra

49
00:02:41,500 --> 00:02:44,400
‫réellement la valeur du paramètre id, et donc bien

50
00:02:44,400 --> 00:02:46,930
‫sûr, c'est celui que nous devons ensuite utiliser

51
00:02:46,930 --> 00:02:49,303
‫ici pour avoir accès à cet id.

52
00:02:50,280 --> 00:02:53,580
‫Essayons donc à nouveau, et maintenant nous avons

53
00:02:53,580 --> 00:02:56,990
‫effectivement l'identifiant de tournée est deux, n'est-ce pas ?

54
00:02:56,990 --> 00:03:00,120
‫Ce journal est donc venu directement de cette fonction ici.

55
00:03:00,120 --> 00:03:01,893
‫Maintenant, ce que je

56
00:03:01,893 --> 00:03:04,160
‫veux aussi vous montrer, c'est que cette

57
00:03:04,160 --> 00:03:07,003
‫fonction middleware ne s'exécutera pour aucune des routes utilisateur.

58
00:03:08,963 --> 00:03:13,380
‫Supposons donc que nous appelions un utilisateur avec un identifiant spécifique,

59
00:03:13,380 --> 00:03:15,593
‫alors allons-y et copions celui-ci

60
00:03:16,770 --> 00:03:20,680
‫ici, créons une nouvelle demande avec un identifiant et

61
00:03:20,680 --> 00:03:22,493
‫permettez-moi de l'enregistrer également.

62
00:03:25,250 --> 00:03:30,240
‫Donc, récupérez l'utilisateur et enregistrez-le dans l'utilisateur, et lorsque je l'envoie ici, nous obtenons bien sûr

63
00:03:30,240 --> 00:03:32,340
‫notre réponse standard de cet

64
00:03:32,340 --> 00:03:35,200
‫itinéraire n'est pas défini, mais vous voyez également que

65
00:03:35,200 --> 00:03:38,210
‫nous n'avons pas de journal comme nous l'avions auparavant.

66
00:03:38,210 --> 00:03:41,800
‫Et c'est bien sûr parce que cette fonction middleware n'est

67
00:03:41,800 --> 00:03:44,940
‫spécifiée que dans notre routeur de tournée.

68
00:03:44,940 --> 00:03:48,280
‫Donc dans ce genre de mini application

69
00:03:48,280 --> 00:03:51,750
‫locale, encore une fois, c'est l'analogie que j'aime faire.

70
00:03:51,750 --> 00:03:53,960
‫Donc, fondamentalement, chaque routeur

71
00:03:53,960 --> 00:03:58,040
‫est une sorte de mini sous-application, une pour chaque ressource.

72
00:03:58,040 --> 00:04:02,210
‫Et donc puisque ce middleware n'est spécifié que sur ce routeur,

73
00:04:02,210 --> 00:04:04,300
‫eh bien bien sûr, ce

74
00:04:04,300 --> 00:04:06,680
‫n'est qu'une partie de la pile

75
00:04:06,680 --> 00:04:10,670
‫middleware si nous sommes réellement à l'intérieur de cette sous-application.

76
00:04:10,670 --> 00:04:11,780
‫Logique?

77
00:04:11,780 --> 00:04:16,460
‫Supposons donc que nous ayons une demande entrante sur tours/id.

78
00:04:16,460 --> 00:04:20,110
‫Donc, cette demande passera ensuite par tous ces middleware, donc

79
00:04:20,110 --> 00:04:22,900
‫d'abord ce middleware, puis celui-ci, puis ce

80
00:04:22,900 --> 00:04:26,190
‫middleware, puis celui-ci, donc tout cela fait partie

81
00:04:26,190 --> 00:04:28,700
‫de la pile de middleware et

82
00:04:28,700 --> 00:04:31,360
‫ensuite il touchera finalement ce middleware et

83
00:04:31,360 --> 00:04:33,660
‫puisque c'est en fait

84
00:04:33,660 --> 00:04:36,650
‫l'itinéraire, il entrera ensuite dans le middleware tourRouter.

85
00:04:36,650 --> 00:04:40,830
‫D'accord, et à partir de là, il va directement dans ce

86
00:04:40,830 --> 00:04:43,823
‫middleware, et alors ce code sera exécuté.

87
00:04:45,650 --> 00:04:48,830
‫Et encore une fois, c'est uniquement parce qu'il a un identifiant dans la route.

88
00:04:48,830 --> 00:04:51,970
‫Sinon, eh bien, cela serait simplement ignoré et

89
00:04:51,970 --> 00:04:54,540
‫passerait directement au middleware suivant

90
00:04:54,540 --> 00:04:58,097
‫dans la pile, donc ceux-ci ici, n'est-ce pas ?

91
00:04:58,097 --> 00:05:01,770
‫Cool, c'est ainsi que fonctionne le middleware param ; mais pour

92
00:05:01,770 --> 00:05:04,296
‫l'instant ce n'est pas vraiment utile.

93
00:05:04,296 --> 00:05:06,170
‫Mais nous pouvons en fait

94
00:05:06,170 --> 00:05:08,430
‫l'utiliser pour un cas d'utilisation très pratique ici.

95
00:05:08,430 --> 00:05:11,670
‫Passons donc à nos fonctions de gestionnaire ici et

96
00:05:11,670 --> 00:05:14,800
‫vous voyez que dans toutes les fonctions

97
00:05:14,800 --> 00:05:19,023
‫de gestionnaire qui utilisent réellement l'identifiant, nous vérifions si l'identifiant est valide.

98
00:05:20,080 --> 00:05:24,560
‫Nous le faisons donc ici dans la tournée get, et nous le faisons

99
00:05:24,560 --> 00:05:29,470
‫également dans la tournée de mise à jour, donc ici, et dans la tournée de suppression.

100
00:05:29,470 --> 00:05:32,250
‫Donc, toutes ces trois fonctions ont ce code

101
00:05:32,250 --> 00:05:34,370
‫très similaire où elles vérifient si

102
00:05:34,370 --> 00:05:38,010
‫l'identifiant est valide et sinon, elles renvoient cette réponse d'identifiant invalide.

103
00:05:38,010 --> 00:05:40,360
‫Nous avons donc tout ce code au même

104
00:05:40,360 --> 00:05:43,100
‫endroit et comme vous le savez déjà, ce n'est

105
00:05:43,100 --> 00:05:46,020
‫pas une bonne pratique de répéter le code et donc

106
00:05:46,020 --> 00:05:48,750
‫ce que nous pouvons faire ici est d'utiliser le

107
00:05:48,750 --> 00:05:51,680
‫concept de param middleware ; et effectuez cette vérification ici

108
00:05:51,680 --> 00:05:53,660
‫dans un middleware externe qu'il exécutera

109
00:05:53,660 --> 00:05:56,483
‫avant même que la demande n'atteigne ces fonctions de gestionnaire.

110
00:05:57,690 --> 00:06:01,010
‫Alors allons de l'avant et copiez ou

111
00:06:01,010 --> 00:06:04,761
‫coupez réellement le code à partir d'ici et créez

112
00:06:04,761 --> 00:06:09,761
‫une nouvelle fonction middleware appelée checkID, et bien sûr, je dois également l'exporter.

113
00:06:14,010 --> 00:06:18,344
‫Donc checkID et nous avons accès, demande, réponse, suivant, et encore

114
00:06:18,344 --> 00:06:21,980
‫une fois, gardez à l'esprit qu'il s'agit d'un middleware

115
00:06:21,980 --> 00:06:25,150
‫de paramètres et que le quatrième argument sera

116
00:06:25,150 --> 00:06:27,353
‫donc la valeur du paramètre.

117
00:06:29,040 --> 00:06:32,090
‫D'accord, collez-le ici, et n'oubliez pas

118
00:06:32,090 --> 00:06:36,570
‫d'appeler ensuite à la fin du middleware, d'accord ?

119
00:06:36,570 --> 00:06:38,650
‫Et ce qui est également très

120
00:06:38,650 --> 00:06:41,402
‫important, c'est que nous ayons cette instruction return

121
00:06:41,402 --> 00:06:44,010
‫ici, car si nous n'avions pas ce

122
00:06:44,010 --> 00:06:47,360
‫retour ici, eh bien, express renverrait cette réponse mais continuerait

123
00:06:47,360 --> 00:06:48,930
‫à exécuter le

124
00:06:48,930 --> 00:06:50,550
‫code dans cette fonction.

125
00:06:50,550 --> 00:06:52,510
‫Et donc après avoir

126
00:06:52,510 --> 00:06:55,170
‫envoyé la réponse, il frappera toujours cette fonction

127
00:06:55,170 --> 00:06:57,670
‫suivante et il passera au middleware suivant

128
00:06:57,670 --> 00:07:00,560
‫et enverra ensuite une autre réponse au client.

129
00:07:00,560 --> 00:07:02,500
‫Mais ce n'est vraiment pas autorisé,

130
00:07:02,500 --> 00:07:05,930
‫alors rappelez-vous que nous avons rencontré cette erreur auparavant, où elle nous

131
00:07:05,930 --> 00:07:08,150
‫a dit que nous n'étions pas autorisés

132
00:07:08,150 --> 00:07:11,520
‫à envoyer des en-têtes après que la réponse avait déjà été envoyée.

133
00:07:11,520 --> 00:07:13,030
‫Et c'est donc le

134
00:07:13,030 --> 00:07:14,990
‫genre d'erreur que nous rencontrerions si

135
00:07:14,990 --> 00:07:17,380
‫nous n'avions pas cette instruction return, d'accord.

136
00:07:17,380 --> 00:07:20,880
‫Encore une fois, assurez-vous simplement qu'après avoir envoyé cette

137
00:07:20,880 --> 00:07:23,460
‫réponse, la fonction reviendra pour qu'elle

138
00:07:23,460 --> 00:07:26,350
‫se termine et qu'elle ne l'appellera plus jamais.

139
00:07:26,350 --> 00:07:28,350
‫Alors n'oubliez jamais cela, mais bien sûr,

140
00:07:28,350 --> 00:07:30,010
‫nous allons le faire

141
00:07:30,010 --> 00:07:31,720
‫plusieurs fois pendant le reste du

142
00:07:31,720 --> 00:07:34,823
‫cours et vous vous habituerez donc à ce genre de modèle.

143
00:07:36,096 --> 00:07:39,570
‫Alors allons-y et supprimons ce code répété de toutes

144
00:07:39,570 --> 00:07:41,230
‫ces autres fonctions, donc

145
00:07:44,756 --> 00:07:47,197
‫nous l'avons à nouveau, et oui.

146
00:07:49,740 --> 00:07:52,352
‫Je veux aussi ce code ici juste

147
00:07:52,352 --> 00:07:54,903
‫pour m'assurer que la fonction est

148
00:07:57,910 --> 00:08:02,510
‫réellement en cours d'exécution, et d'accord, alors maintenant nous pouvons nous en débarrasser

149
00:08:02,510 --> 00:08:06,640
‫ici et le remplacer par notre fonction de contrôleur nouvellement créée.

150
00:08:06,640 --> 00:08:07,990
‫Donc tourController,

151
00:08:11,550 --> 00:08:13,143
‫checkID, alors vérifions ça

152
00:08:15,180 --> 00:08:18,370
‫maintenant, et bien encore, juste pour nous assurer

153
00:08:18,370 --> 00:08:19,860
‫qu'il ne s'exécute pas

154
00:08:19,860 --> 00:08:24,350
‫là où nous n'avons pas d'identifiant, donc nous n'avons pas de

155
00:08:24,350 --> 00:08:27,810
‫log ici, donc tout fonctionne toujours de ce côté.

156
00:08:27,810 --> 00:08:30,670
‫Et maintenant, obtenez une visite avec un

157
00:08:30,670 --> 00:08:33,883
‫identifiant normal, donc un identifiant valide, et voyons voir.

158
00:08:34,750 --> 00:08:38,040
‫Eh bien, nous obtenons que l'identifiant de la tournée est

159
00:08:38,040 --> 00:08:40,346
‫log, ce qui signifie que s'il

160
00:08:40,346 --> 00:08:43,563
‫a réellement exécuté notre middleware checkID, n'est-ce pas ?

161
00:08:44,560 --> 00:08:46,986
‫Et si nous essayons maintenant un

162
00:08:46,986 --> 00:08:50,090
‫identifiant invalide, alors nous obtenons notre message d'identifiant

163
00:08:50,090 --> 00:08:54,803
‫invalide, le code d'erreur 404 et bien sûr notre identifiant de tournée.

164
00:08:56,200 --> 00:08:58,930
‫Faisons la même chose avec le patch,

165
00:08:58,930 --> 00:09:01,240
‫nous avons déjà un identifiant

166
00:09:01,240 --> 00:09:04,740
‫invalide ici et il fonctionne donc également sur celui-ci.

167
00:09:04,740 --> 00:09:08,420
‫Alors, parfait, non ?

168
00:09:08,420 --> 00:09:11,865
‫Nous n'avons donc plus le code checkID dans le

169
00:09:11,865 --> 00:09:15,910
‫gestionnaire de mise à jour que nous venons d'appeler, mais

170
00:09:15,910 --> 00:09:18,240
‫notre ID est toujours vérifié

171
00:09:18,240 --> 00:09:21,470
‫car nous avons ce middleware, donc ici.

172
00:09:21,470 --> 00:09:23,630
‫Nous avons ce middleware dans la

173
00:09:23,630 --> 00:09:26,750
‫pile avant qu'il n'atteigne réellement le tourController de mise à jour.

174
00:09:26,750 --> 00:09:30,200
‫Donc, ce middleware fait maintenant partie de notre pipeline comme

175
00:09:30,200 --> 00:09:32,770
‫vous pouvez l'imaginer, maintenant vous pourriez affirmer

176
00:09:32,770 --> 00:09:35,340
‫que nous pourrions simplement créer une fonction

177
00:09:35,340 --> 00:09:37,530
‫simple qui pourrait également vérifier l'ID

178
00:09:37,530 --> 00:09:40,220
‫et j'appelle cette fonction à l'intérieur de chacune

179
00:09:40,220 --> 00:09:43,910
‫de ces fonctions de visite, puis appelle à l'intérieur de chacun

180
00:09:43,910 --> 00:09:47,830
‫de ces contrôleurs de tournée pertinents ; mais cela irait vraiment

181
00:09:47,830 --> 00:09:49,410
‫à l'encontre de

182
00:09:49,410 --> 00:09:52,860
‫la philosophie d'express, où nous devrions toujours travailler avec la

183
00:09:52,860 --> 00:09:55,730
‫pile middleware, donc avec ce pipeline autant que

184
00:09:55,730 --> 00:10:00,010
‫nous le pouvons, d'accord, et donc ces fonctions ici, elles n'ont pas

185
00:10:00,010 --> 00:10:02,850
‫du tout à se soucier de la validation.

186
00:10:02,850 --> 00:10:05,580
‫Chacune de ces fonctions n'a qu'un seul but qui est

187
00:10:05,580 --> 00:10:07,540
‫de faire ce qu'elles disent, donc

188
00:10:07,540 --> 00:10:09,200
‫celle-ci obtient juste la visite,

189
00:10:09,200 --> 00:10:12,170
‫celle-ci crée juste une visite, celle-ci met à jour, et

190
00:10:12,170 --> 00:10:14,650
‫celle-ci supprime simplement, elle ne vérifie pas, elle

191
00:10:14,650 --> 00:10:17,003
‫ne pas besoin de s'inquiéter de tout ça.

192
00:10:18,910 --> 00:10:21,060
‫Et si nous ajoutions maintenant

193
00:10:21,060 --> 00:10:24,630
‫un autre contrôleur ici également en fonction de l'identifiant, cela

194
00:10:24,630 --> 00:10:27,380
‫vérifierait également automatiquement si l'identifiant n'est pas

195
00:10:27,380 --> 00:10:30,960
‫valide sans que nous ayons à effectuer des étapes supplémentaires.

196
00:10:30,960 --> 00:10:34,620
‫Donc, cela vérifiera automatiquement l'identifiant et c'est

197
00:10:34,620 --> 00:10:38,670
‫donc vraiment pratique et aussi comment les applications

198
00:10:38,670 --> 00:10:41,450
‫express devraient fonctionner, super.

199
00:10:41,450 --> 00:10:45,810
‫Nous avons donc un autre outil dans notre boîte à outils express

200
00:10:45,810 --> 00:10:49,493
‫que nous pouvons maintenant utiliser pour écrire nos applications express.

