﻿1
00:00:01,220 --> 00:00:03,730
‫-: En este video, creemos un

2
00:00:03,730 --> 00:00:06,333
‫tipo especial de middleware llamado param middleware.

3
00:00:07,920 --> 00:00:11,460
‫Entonces, el middleware param es un middleware que solo se

4
00:00:11,460 --> 00:00:13,940
‫ejecuta para ciertos parámetros, así que

5
00:00:13,940 --> 00:00:17,450
‫básicamente, cuando tenemos un cierto parámetro en nuestra URL.

6
00:00:17,450 --> 00:00:20,000
‫Ahora, en nuestro ejemplo aquí, el único

7
00:00:20,000 --> 00:00:25,000
‫parámetro que podríamos tener en la URL de nuestra ruta es la identificación, ¿verdad?

8
00:00:25,320 --> 00:00:28,120
‫Y entonces podemos escribir middleware que

9
00:00:28,120 --> 00:00:31,100
‫solo se ejecute cuando esta identificación esté presente

10
00:00:31,100 --> 00:00:34,570
‫en la URL, está bien, déjame mostrarte cómo hacerlo.

11
00:00:34,570 --> 00:00:38,000
‫En realidad, es bastante simple, por lo que está

12
00:00:39,690 --> 00:00:43,260
‫en nuestro enrutador y luego en el método param, está bien.

13
00:00:43,260 --> 00:00:46,210
‫Y aquí especificamos primero el parámetro que realmente

14
00:00:46,210 --> 00:00:48,890
‫queremos buscar, así que básicamente el parámetro

15
00:00:48,890 --> 00:00:50,900
‫para el que se

16
00:00:50,900 --> 00:00:54,400
‫ejecutará este middleware, y se llama id, y luego,

17
00:00:54,400 --> 00:00:57,333
‫por supuesto, nuestra función de middleware real.

18
00:00:59,060 --> 00:01:02,800
‫Y, como de costumbre, tenemos acceso a la solicitud

19
00:01:02,800 --> 00:01:05,070
‫y al objeto de

20
00:01:05,070 --> 00:01:07,350
‫respuesta, y luego detecta una función

21
00:01:07,350 --> 00:01:10,300
‫de middleware también para la siguiente función, ¿verdad?

22
00:01:10,300 --> 00:01:12,090
‫Ahora, en una función

23
00:01:12,090 --> 00:01:15,370
‫de middleware param, en realidad tenemos acceso a un cuarto

24
00:01:15,370 --> 00:01:18,783
‫argumento y ese es el valor del parámetro en cuestión.

25
00:01:20,280 --> 00:01:23,553
‫Por eso solemos llamarlo val, que significa valor.

26
00:01:26,240 --> 00:01:28,720
‫Y ahora podemos continuar y simplemente

27
00:01:28,720 --> 00:01:30,650
‫iniciar sesión en la

28
00:01:30,650 --> 00:01:35,510
‫consola, solo para ver si esto realmente funciona, así que digamos que

29
00:01:37,700 --> 00:01:40,410
‫Tour id es y luego id, ¿verdad?

30
00:01:40,410 --> 00:01:43,840
‫A continuación, también tenemos que llamar a continuación, ¿verdad?

31
00:01:43,840 --> 00:01:46,470
‫Porque, de lo contrario, el ciclo de

32
00:01:46,470 --> 00:01:48,970
‫respuesta a la solicitud se atascará

33
00:01:48,970 --> 00:01:51,630
‫en esta función de middleware y no podrá

34
00:01:51,630 --> 00:01:54,570
‫pasar al siguiente middleware de la pila, ¿verdad?

35
00:01:54,570 --> 00:01:56,903
‫Cuáles serán estas rutas aquí abajo.

36
00:01:57,860 --> 00:02:01,563
‫Muy bien, vamos a guardarlo y verlo ahora.

37
00:02:03,000 --> 00:02:05,260
‫Y queremos que no sea

38
00:02:06,370 --> 00:02:10,100
‫para todos los usuarios, sino para obtener un Tour, ¿verdad?

39
00:02:10,100 --> 00:02:11,940
‫Bueno, déjame mostrarte primero

40
00:02:11,940 --> 00:02:16,940
‫lo que sucede si no tenemos ninguna identificación, está bien, y ahora, no

41
00:02:17,020 --> 00:02:20,310
‫vemos ningún inicio de sesión en nuestra consola.

42
00:02:20,310 --> 00:02:22,870
‫Pero si ahora envié la misma solicitud

43
00:02:22,870 --> 00:02:26,843
‫en esta ruta donde tenemos la identificación, veamos qué sucede entonces.

44
00:02:26,843 --> 00:02:29,610
‫Oh, me dice que id no está definido,

45
00:02:29,610 --> 00:02:33,500
‫y de hecho no es id, así que fue un error estúpido.

46
00:02:33,500 --> 00:02:36,420
‫Entonces es val por valor, ¿verdad?

47
00:02:36,420 --> 00:02:39,710
‫Entonces, recuerde cómo dije que este parámetro de valor es

48
00:02:39,710 --> 00:02:41,500
‫el que realmente contendrá

49
00:02:41,500 --> 00:02:44,400
‫el valor del parámetro de identificación, y por

50
00:02:44,400 --> 00:02:46,930
‫supuesto, ese es el que debemos usar

51
00:02:46,930 --> 00:02:49,303
‫aquí para obtener acceso a esa identificación.

52
00:02:50,280 --> 00:02:53,580
‫Intentémoslo de nuevo, y ahora tenemos

53
00:02:53,580 --> 00:02:56,990
‫el ID del Tour es dos, ¿verdad?

54
00:02:56,990 --> 00:03:00,120
‫Entonces ese registro vino directamente de esta función aquí.

55
00:03:00,120 --> 00:03:01,893
‫Ahora, lo que también quiero

56
00:03:01,893 --> 00:03:04,160
‫mostrarles es que esta función de middleware no

57
00:03:04,160 --> 00:03:07,003
‫se ejecutará para ninguna de las rutas de los usuarios.

58
00:03:08,963 --> 00:03:13,380
‫Entonces, digamos que llamamos a un usuario con una identificación específica,

59
00:03:13,380 --> 00:03:15,593
‫así que continuemos y copiemos

60
00:03:16,770 --> 00:03:20,680
‫este aquí, creemos una nueva solicitud con una identificación

61
00:03:20,680 --> 00:03:22,493
‫y déjeme guardarla también.

62
00:03:25,250 --> 00:03:30,240
‫Así que obtenga usuario y guarde a usuario, y cuando lo envíe aquí obtenemos

63
00:03:30,240 --> 00:03:32,340
‫nuestra respuesta estándar de que

64
00:03:32,340 --> 00:03:35,200
‫esta ruta no está definida, pero también

65
00:03:35,200 --> 00:03:38,210
‫verá que no tenemos un registro como antes.

66
00:03:38,210 --> 00:03:41,800
‫Y eso se debe, por supuesto, a que esta función de

67
00:03:41,800 --> 00:03:44,940
‫middleware solo se especifica en nuestro enrutador de viaje.

68
00:03:44,940 --> 00:03:48,280
‫Entonces, en este tipo de mini aplicación local,

69
00:03:48,280 --> 00:03:51,750
‫nuevamente, esa es la analogía que me gusta hacer.

70
00:03:51,750 --> 00:03:53,960
‫Básicamente, cada enrutador es

71
00:03:53,960 --> 00:03:58,040
‫una especie de mini subaplicación, una para cada recurso.

72
00:03:58,040 --> 00:04:02,210
‫Y dado que este middleware solo se especifica en este

73
00:04:02,210 --> 00:04:04,300
‫enrutador, entonces, por supuesto,

74
00:04:04,300 --> 00:04:06,680
‫es solo una parte de la

75
00:04:06,680 --> 00:04:10,670
‫pila de middleware si realmente estamos dentro de esta sub-aplicación.

76
00:04:10,670 --> 00:04:11,780
‫¿Tiene sentido?

77
00:04:11,780 --> 00:04:16,460
‫Supongamos que tenemos una solicitud entrante en tours / id.

78
00:04:16,460 --> 00:04:20,110
‫Entonces, esa solicitud pasará por todos estos middleware, primero

79
00:04:20,110 --> 00:04:22,900
‫este middleware, luego este, luego este middleware,

80
00:04:22,900 --> 00:04:26,190
‫luego este, entonces todos estos son parte de

81
00:04:26,190 --> 00:04:28,700
‫la pila de middleware y finalmente

82
00:04:28,700 --> 00:04:31,360
‫llegará a este middleware y ya que

83
00:04:31,360 --> 00:04:33,660
‫esto es en realidad

84
00:04:33,660 --> 00:04:36,650
‫la ruta, luego entrará en el middleware tourRouter.

85
00:04:36,650 --> 00:04:40,830
‫Está bien, y desde allí pasa directamente a este middleware,

86
00:04:40,830 --> 00:04:43,823
‫y entonces se ejecutará este código.

87
00:04:45,650 --> 00:04:48,830
‫Y nuevamente, eso es solo porque tiene una identificación en la ruta.

88
00:04:48,830 --> 00:04:51,970
‫Si no, bueno, entonces esto simplemente se ignoraría

89
00:04:51,970 --> 00:04:54,540
‫y pasaría directamente al siguiente middleware

90
00:04:54,540 --> 00:04:58,097
‫en la pila, así que estos aquí abajo, ¿verdad?

91
00:04:58,097 --> 00:05:01,770
‫Genial, así es como funciona el middleware param; pero por

92
00:05:01,770 --> 00:05:04,296
‫ahora no es realmente tan útil.

93
00:05:04,296 --> 00:05:06,170
‫Pero en realidad podemos usarlo

94
00:05:06,170 --> 00:05:08,430
‫para un caso de uso muy práctico aquí.

95
00:05:08,430 --> 00:05:11,670
‫Así que vayamos a nuestras funciones de controlador aquí

96
00:05:11,670 --> 00:05:14,800
‫y verá que en todas las funciones de

97
00:05:14,800 --> 00:05:19,023
‫controlador que realmente usan la identificación, verificamos si la identificación es válida.

98
00:05:20,080 --> 00:05:24,560
‫Así que lo hacemos aquí en get tour, y también

99
00:05:24,560 --> 00:05:29,470
‫lo hacemos en update tour, así que aquí, y en delete tour.

100
00:05:29,470 --> 00:05:32,250
‫Entonces, estas tres funciones tienen este código muy

101
00:05:32,250 --> 00:05:34,370
‫similar donde verifican si la identificación

102
00:05:34,370 --> 00:05:38,010
‫es válida y, si no, envían esta respuesta de identificación no válida.

103
00:05:38,010 --> 00:05:40,360
‫Tenemos todo este código en el mismo

104
00:05:40,360 --> 00:05:43,100
‫lugar y, como ya sabe, no es una buena

105
00:05:43,100 --> 00:05:46,020
‫práctica repetir el código, por lo que lo que podemos

106
00:05:46,020 --> 00:05:48,750
‫hacer aquí es usar el concepto de middleware

107
00:05:48,750 --> 00:05:51,680
‫param; y realice esta verificación aquí en un middleware externo

108
00:05:51,680 --> 00:05:53,660
‫que se ejecutará antes de

109
00:05:53,660 --> 00:05:56,483
‫que la solicitud llegue a estas funciones del controlador.

110
00:05:57,690 --> 00:06:01,010
‫Así que sigamos adelante y copiemos o

111
00:06:01,010 --> 00:06:04,761
‫realmente cortemos el código desde aquí y creemos una

112
00:06:04,761 --> 00:06:09,761
‫nueva función de middleware llamada checkID, y por supuesto también necesito exportar eso.

113
00:06:14,010 --> 00:06:18,344
‫Entonces, checkID y tenemos acceso, solicitud, respuesta, siguiente y nuevamente,

114
00:06:18,344 --> 00:06:21,980
‫tenga en cuenta que es un middleware param y,

115
00:06:21,980 --> 00:06:25,150
‫por lo tanto, el cuarto argumento será

116
00:06:25,150 --> 00:06:27,353
‫el valor del parámetro.

117
00:06:29,040 --> 00:06:32,090
‫De acuerdo, pégalo aquí y luego

118
00:06:32,090 --> 00:06:36,570
‫no olvides llamar a next al final del middleware, ¿de acuerdo?

119
00:06:36,570 --> 00:06:38,650
‫Y lo que también es muy

120
00:06:38,650 --> 00:06:41,402
‫importante es que tenemos esta declaración de retorno

121
00:06:41,402 --> 00:06:44,010
‫aquí, porque si no tuviéramos este retorno aquí,

122
00:06:44,010 --> 00:06:47,360
‫bueno, entonces express enviaría esta respuesta de regreso pero aún

123
00:06:47,360 --> 00:06:48,930
‫así continuaría ejecutando

124
00:06:48,930 --> 00:06:50,550
‫el código en esta función.

125
00:06:50,550 --> 00:06:52,510
‫Y así, después de

126
00:06:52,510 --> 00:06:55,170
‫enviar la respuesta, seguirá presionando la siguiente

127
00:06:55,170 --> 00:06:57,670
‫función y pasará al siguiente middleware

128
00:06:57,670 --> 00:07:00,560
‫y luego enviará otra respuesta al cliente.

129
00:07:00,560 --> 00:07:02,500
‫Pero eso realmente no está permitido,

130
00:07:02,500 --> 00:07:05,930
‫así que recuerde que en realidad nos encontramos con este error

131
00:07:05,930 --> 00:07:08,150
‫antes, donde nos decía que no podíamos

132
00:07:08,150 --> 00:07:11,520
‫enviar encabezados después de que la respuesta ya había sido enviada.

133
00:07:11,520 --> 00:07:13,030
‫Y ese es el tipo

134
00:07:13,030 --> 00:07:14,990
‫de error con el que nos encontraríamos

135
00:07:14,990 --> 00:07:17,380
‫si no tuviéramos esta declaración de retorno, está bien.

136
00:07:17,380 --> 00:07:20,880
‫Entonces, nuevamente, asegúrese de que después de enviar esta

137
00:07:20,880 --> 00:07:23,460
‫respuesta, la función regrese para que

138
00:07:23,460 --> 00:07:26,350
‫termine y nunca llame a esto a continuación.

139
00:07:26,350 --> 00:07:28,350
‫Así que nunca lo olvides, pero,

140
00:07:28,350 --> 00:07:30,010
‫por supuesto, lo haremos

141
00:07:30,010 --> 00:07:31,720
‫varias veces durante el resto del

142
00:07:31,720 --> 00:07:34,823
‫curso, así que te acostumbrarás a este tipo de patrón.

143
00:07:36,096 --> 00:07:39,570
‫Así que sigamos adelante y eliminemos este código repetido de todas

144
00:07:39,570 --> 00:07:41,230
‫estas otras funciones, así

145
00:07:44,756 --> 00:07:47,197
‫que aquí lo tenemos de nuevo, y sí.

146
00:07:49,740 --> 00:07:52,352
‫También quiero este código aquí solo para

147
00:07:52,352 --> 00:07:54,903
‫asegurarme de que la función se

148
00:07:57,910 --> 00:08:02,510
‫esté ejecutando realmente, y está bien, así que ahora podemos deshacernos de

149
00:08:02,510 --> 00:08:06,640
‫esto aquí y reemplazarlo con nuestra función de controlador recién creada.

150
00:08:06,640 --> 00:08:07,990
‫Entonces tourController, checkID,

151
00:08:11,550 --> 00:08:13,143
‫así que veamos eso

152
00:08:15,180 --> 00:08:18,370
‫ahora, y bueno nuevamente, solo para asegurarnos de

153
00:08:18,370 --> 00:08:19,860
‫que no se ejecute

154
00:08:19,860 --> 00:08:24,350
‫donde no tenemos una identificación, por lo que no tenemos un registro

155
00:08:24,350 --> 00:08:27,810
‫aquí, por lo que todo sigue funcionando en ese lado.

156
00:08:27,810 --> 00:08:30,670
‫Y ahora haga un recorrido con una identificación

157
00:08:30,670 --> 00:08:33,883
‫regular, por lo que una identificación válida, y veamos.

158
00:08:34,750 --> 00:08:38,040
‫Bueno, obtenemos que el ID de Tour es

159
00:08:38,040 --> 00:08:40,346
‫log, y eso significa que

160
00:08:40,346 --> 00:08:43,563
‫si realmente ejecutó nuestro middleware checkID, ¿verdad?

161
00:08:44,560 --> 00:08:46,986
‫Y si ahora probamos con una

162
00:08:46,986 --> 00:08:50,090
‫identificación no válida, entonces obtenemos nuestro mensaje de identificación

163
00:08:50,090 --> 00:08:54,803
‫no válida, el código de error 404 y, por supuesto, nuestra identificación de viaje.

164
00:08:56,200 --> 00:08:58,930
‫Hagamos lo mismo con el parche,

165
00:08:58,930 --> 00:09:01,240
‫ya tenemos una ID

166
00:09:01,240 --> 00:09:04,740
‫inválida aquí y también se ejecuta en esta.

167
00:09:04,740 --> 00:09:08,420
‫Entonces, perfecto, ¿verdad?

168
00:09:08,420 --> 00:09:11,865
‫Entonces, ya no tenemos el código checkID en el

169
00:09:11,865 --> 00:09:15,910
‫controlador de actualización que acabamos de invocar básicamente, pero aún

170
00:09:15,910 --> 00:09:18,240
‫así nuestra ID está verificada

171
00:09:18,240 --> 00:09:21,470
‫porque tenemos ese middleware, así que esto aquí.

172
00:09:21,470 --> 00:09:23,630
‫Tenemos ese middleware en la

173
00:09:23,630 --> 00:09:26,750
‫pila antes de que llegue a la actualización tourController.

174
00:09:26,750 --> 00:09:30,200
‫Entonces, este middleware ahora es parte de nuestra canalización como

175
00:09:30,200 --> 00:09:32,770
‫puede imaginarlo, ahora podría argumentar que simplemente

176
00:09:32,770 --> 00:09:35,340
‫podríamos crear una función simple que también

177
00:09:35,340 --> 00:09:37,530
‫podría verificar el ID y

178
00:09:37,530 --> 00:09:40,220
‫llamar a esa función dentro de cada

179
00:09:40,220 --> 00:09:43,910
‫una de estas funciones de recorrido, y luego llamar dentro

180
00:09:43,910 --> 00:09:47,830
‫de cada uno de estos controladores turísticos relevantes; pero eso realmente

181
00:09:47,830 --> 00:09:49,410
‫iría en contra

182
00:09:49,410 --> 00:09:52,860
‫de la filosofía de express, donde siempre deberíamos trabajar con

183
00:09:52,860 --> 00:09:55,730
‫la pila de middleware, por lo que con

184
00:09:55,730 --> 00:10:00,010
‫esta canalización tanto como podamos, está bien, y estas funciones aquí, no

185
00:10:00,010 --> 00:10:02,850
‫tienen que preocuparse en absoluto por la validación.

186
00:10:02,850 --> 00:10:05,580
‫Cada una de estas funciones tiene un solo propósito, que

187
00:10:05,580 --> 00:10:07,540
‫es hacer lo que dicen, por

188
00:10:07,540 --> 00:10:09,200
‫lo que esta solo obtiene

189
00:10:09,200 --> 00:10:12,170
‫el recorrido, esta solo crea un recorrido, esta solo se

190
00:10:12,170 --> 00:10:14,650
‫actualiza y esta simplemente elimina, no marca, no

191
00:10:14,650 --> 00:10:17,003
‫No tienes que preocuparte por nada de eso.

192
00:10:18,910 --> 00:10:21,060
‫Y si ahora agregamos otro

193
00:10:21,060 --> 00:10:24,630
‫controlador aquí también dependiendo de la identificación, entonces eso

194
00:10:24,630 --> 00:10:27,380
‫también verificaría automáticamente si la identificación no

195
00:10:27,380 --> 00:10:30,960
‫es válida sin que tengamos que hacer ningún paso adicional.

196
00:10:30,960 --> 00:10:34,620
‫Entonces, esto automáticamente buscará la identificación y

197
00:10:34,620 --> 00:10:38,670
‫eso es realmente útil y también cómo deberían

198
00:10:38,670 --> 00:10:41,450
‫funcionar las aplicaciones exprés, genial.

199
00:10:41,450 --> 00:10:45,810
‫Así que tenemos otra herramienta en nuestra caja de herramientas express

200
00:10:45,810 --> 00:10:49,493
‫que ahora podemos usar para escribir nuestras aplicaciones express.

