﻿1
00:00:01,150 --> 00:00:03,310
‫Hombre: En este video, ahora vamos a

2
00:00:03,310 --> 00:00:06,080
‫implementar el middleware de manejo de errores globales del que

3
00:00:06,080 --> 00:00:07,483
‫acabamos de hablar antes.

4
00:00:09,020 --> 00:00:11,280
‫Así que recuerde que

5
00:00:11,280 --> 00:00:13,650
‫el objetivo es escribir una función

6
00:00:13,650 --> 00:00:17,690
‫de middleware, que podrá manejar errores operativos como este.

7
00:00:17,690 --> 00:00:22,010
‫Bien, entonces cuando un usuario ingresa a una URL que no existe,

8
00:00:22,010 --> 00:00:24,890
‫mientras que podemos considerar que es un error

9
00:00:24,890 --> 00:00:27,590
‫operativo, y en este caso lo manejamos

10
00:00:27,590 --> 00:00:29,630
‫enviando esta respuesta aquí, ¿verdad?

11
00:00:29,630 --> 00:00:33,320
‫Pero nuevamente, el objetivo es hacerlo en un lugar central.

12
00:00:33,320 --> 00:00:37,200
‫Por ejemplo, tenemos cosas similares aquí.

13
00:00:37,200 --> 00:00:39,870
‫Así que por todas partes aquí tenemos estos

14
00:00:39,870 --> 00:00:41,950
‫fragmentos aquí, que manejan los errores.

15
00:00:41,950 --> 00:00:45,270
‫Entonces tenemos que activar el bloque etch aquí, y

16
00:00:45,270 --> 00:00:47,460
‫si hay un error, bueno,

17
00:00:47,460 --> 00:00:50,083
‫entonces lo manejamos enviando ese error al cliente.

18
00:00:51,290 --> 00:00:53,520
‫Y nuevamente, al final, queremos deshacernos

19
00:00:53,520 --> 00:00:56,170
‫de todo esto y manejar el error

20
00:00:56,170 --> 00:00:57,900
‫en un middleware central.

21
00:00:57,900 --> 00:01:00,556
‫Y ahora comencemos construyendo realmente

22
00:01:00,556 --> 00:01:02,800
‫esa función de middleware.

23
00:01:02,800 --> 00:01:05,470
‫Y en Express, en realidad es muy fácil.

24
00:01:05,470 --> 00:01:07,580
‫Recuerde que le dije que Express

25
00:01:07,580 --> 00:01:09,540
‫ya viene con controladores de middleware

26
00:01:09,540 --> 00:01:10,880
‫listos para usar.

27
00:01:10,880 --> 00:01:15,720
‫Entonces, como siempre, comenzamos usando app. use, está bien, y

28
00:01:15,720 --> 00:01:19,210
‫luego aquí definimos nuestra función de middleware.

29
00:01:19,210 --> 00:01:21,880
‫Entonces, para definir un middleware de manejo

30
00:01:21,880 --> 00:01:24,870
‫de errores, todo lo que tenemos que hacer es darle

31
00:01:24,870 --> 00:01:27,980
‫cuatro argumentos a la función de middleware y Express lo

32
00:01:27,980 --> 00:01:30,740
‫reconocerá automáticamente como un middleware de manejo de errores.

33
00:01:30,740 --> 00:01:33,653
‫Y por lo tanto, solo llámelo cuando haya un error.

34
00:01:34,556 --> 00:01:38,220
‫Y así, al igual que en muchos otros casos, esta

35
00:01:38,220 --> 00:01:41,740
‫función de middleware es una función de error primero,

36
00:01:41,740 --> 00:01:43,330
‫lo que significa que el

37
00:01:43,330 --> 00:01:44,483
‫primer argumento

38
00:01:45,930 --> 00:01:50,563
‫es el error, y luego tenemos la solicitud, la respuesta y el siguiente.

39
00:01:51,975 --> 00:01:55,280
‫Entonces, al especificar cuatro parámetros, Express sabe automáticamente que

40
00:01:55,280 --> 00:01:57,750
‫toda esta función aquí es un

41
00:01:57,750 --> 00:02:00,150
‫middleware de manejo de errores.

42
00:02:00,150 --> 00:02:04,150
‫Así que ahora implementemos el código para esta función aquí y luego

43
00:02:04,150 --> 00:02:06,400
‫le mostraré cómo podemos crear un

44
00:02:06,400 --> 00:02:09,000
‫error para que esta función de middleware

45
00:02:09,000 --> 00:02:09,930
‫sea detectada.

46
00:02:09,930 --> 00:02:13,450
‫Entonces, dos pasos, primero creamos el middleware, luego en

47
00:02:13,450 --> 00:02:15,130
‫el segundo paso

48
00:02:15,130 --> 00:02:18,700
‫crearemos un error para que esta función sea detectada.

49
00:02:18,700 --> 00:02:20,943
‫Y por ahora, hagámoslo realmente simple aquí.

50
00:02:20,943 --> 00:02:23,590
‫Entonces, todo lo que realmente queremos hacer

51
00:02:23,590 --> 00:02:27,100
‫para manejar este error es enviar una respuesta al cliente.

52
00:02:27,100 --> 00:02:29,893
‫Entonces res. estado, pero ahora

53
00:02:31,170 --> 00:02:35,100
‫realmente no sabemos qué código de estado es, ¿verdad?

54
00:02:35,100 --> 00:02:38,420
‫Entonces, por ejemplo, en este caso aquí es un 404, pero

55
00:02:38,420 --> 00:02:41,650
‫tenemos algunos errores aquí, que tienen otros códigos de estado.

56
00:02:41,650 --> 00:02:46,020
‫Como si tuviéramos un 400 por ejemplo para una mala solicitud,

57
00:02:46,020 --> 00:02:48,823
‫o realmente todo tipo de otros códigos.

58
00:02:50,903 --> 00:02:53,142
‫Y entonces realmente queremos leer ese

59
00:02:53,142 --> 00:02:56,113
‫código de estado del objeto de error, ¿de acuerdo?

60
00:02:57,480 --> 00:02:59,650
‫Entonces, cuando creamos ese error un poco más

61
00:02:59,650 --> 00:03:01,143
‫adelante en el segundo

62
00:03:01,143 --> 00:03:04,504
‫paso, como le dije, definiremos este código de estado en el error.

63
00:03:04,504 --> 00:03:08,943
‫Digamos que el código de estado, y ahora quiero definir un

64
00:03:10,533 --> 00:03:11,962
‫valor predeterminado aquí.

65
00:03:11,962 --> 00:03:14,620
‫Porque habrá errores que no provienen de nosotros

66
00:03:14,620 --> 00:03:17,090
‫porque habrá errores sin un código de

67
00:03:17,090 --> 00:03:19,590
‫estado, por lo tanto, errores que no son

68
00:03:19,590 --> 00:03:22,750
‫creados por nosotros, pero por ejemplo en otros lugares de

69
00:03:22,750 --> 00:03:24,240
‫la aplicación de notas.

70
00:03:24,240 --> 00:03:26,640
‫Y sé que suena un poco confuso por ahora, pero

71
00:03:26,640 --> 00:03:28,770
‫lo verá a lo largo de esta sección.

72
00:03:28,770 --> 00:03:31,790
‫Por ahora, definamos realmente este código de estado

73
00:03:31,790 --> 00:03:32,623
‫predeterminado.

74
00:03:33,550 --> 00:03:36,959
‫Entonces decimos que el error. statuscode es

75
00:03:36,959 --> 00:03:40,446
‫igual a err. statuscode básicamente si está

76
00:03:40,446 --> 00:03:45,230
‫definido o el código 500, lo que significa nuevamente, error interno

77
00:03:45,230 --> 00:03:48,140
‫del servidor, y ese es generalmente el

78
00:03:48,140 --> 00:03:49,763
‫estándar que usamos.

79
00:03:50,660 --> 00:03:54,820
‫Y de la misma forma, también definimos el

80
00:03:54,820 --> 00:03:59,820
‫estado, digamos error. el estado es igual a error. estado si está

81
00:04:01,350 --> 00:04:03,713
‫definido, y si no, es

82
00:04:04,670 --> 00:04:05,760
‫error.

83
00:04:05,760 --> 00:04:10,120
‫Entonces, el error, recuerde, es cuando tenemos un código de estado 500 y si es

84
00:04:10,120 --> 00:04:13,033
‫un código de estado 400, entonces es un error.

85
00:04:13,926 --> 00:04:16,723
‫Entonces, por ejemplo, aquí en este 404, el estado es fallido.

86
00:04:18,597 --> 00:04:20,960
‫Y ahora aquí

87
00:04:20,960 --> 00:04:25,960
‫podemos usar eso, entonces error. statuscode, y luego enviar un json, muy

88
00:04:27,100 --> 00:04:29,363
‫similar a lo que hicimos antes.

89
00:04:30,320 --> 00:04:34,830
‫Entonces comenzamos con el estado y lo leemos desde el error. status y el

90
00:04:37,010 --> 00:04:40,473
‫mensaje también vendrá del error.

91
00:04:41,380 --> 00:04:44,970
‫Así que err. mensaje y te mostraré en un

92
00:04:44,970 --> 00:04:48,223
‫segundo cómo ese error. Aquí se crea la propiedad de mensaje.

93
00:04:49,750 --> 00:04:52,700
‫De acuerdo, pero por ahora, este es nuestro middleware de manejo

94
00:04:52,700 --> 00:04:54,000
‫de errores muy simple.

95
00:04:55,400 --> 00:04:58,190
‫Muy simple, pero por ahora funciona.

96
00:04:58,190 --> 00:05:00,200
‫Y ahora el segundo paso, donde

97
00:05:00,200 --> 00:05:01,830
‫realmente creamos un error.

98
00:05:01,830 --> 00:05:03,680
‫Y hagámoslo aquí.

99
00:05:03,680 --> 00:05:06,270
‫Así que aquí, en esa función, que maneja

100
00:05:06,270 --> 00:05:08,820
‫todas las rutas no controladas, permítanme comentar

101
00:05:08,820 --> 00:05:11,833
‫esta aquí y, en su lugar, queremos crear un error.

102
00:05:12,973 --> 00:05:16,850
‫Entonces, digamos const err y

103
00:05:18,080 --> 00:05:21,700
‫es un nuevo error.

104
00:05:21,700 --> 00:05:24,840
‫Así que básicamente usamos el constructor de errores incorporado

105
00:05:24,840 --> 00:05:26,600
‫para crear un error.

106
00:05:26,600 --> 00:05:29,320
‫Y ahora podemos pasar una cadena y esa cadena

107
00:05:29,320 --> 00:05:31,900
‫será la propiedad del mensaje de error.

108
00:05:31,900 --> 00:05:35,163
‫Entonces, de lo que acabamos de hablar aquí.

109
00:05:37,350 --> 00:05:40,113
‫Entonces ese mensaje debería ser este mensaje.

110
00:05:42,920 --> 00:05:43,753
‫¿Está bien?

111
00:05:45,600 --> 00:05:49,600
‫Y luego debería decir err. estado que

112
00:05:51,680 --> 00:05:52,693
‫es

113
00:05:55,830 --> 00:06:00,450
‫falla, y luego err. statusCode es igual a 404.

114
00:06:00,450 --> 00:06:03,610
‫Entonces eso es lo que mencioné antes de que podemos definir el

115
00:06:03,610 --> 00:06:06,770
‫código de estado y el estado en el objeto de error.

116
00:06:06,770 --> 00:06:09,010
‫Y eso es exactamente lo que estamos haciendo aquí.

117
00:06:09,010 --> 00:06:10,950
‫Estamos creando un error y luego definimos

118
00:06:10,950 --> 00:06:14,220
‫el estado y las propiedades del código de estado en él para

119
00:06:14,220 --> 00:06:15,930
‫que nuestro middleware de manejo

120
00:06:15,930 --> 00:06:18,150
‫de errores pueda usarlos en el siguiente paso.

121
00:06:18,150 --> 00:06:20,840
‫Pero ahora, ¿cómo leemos realmente ese siguiente paso?

122
00:06:20,840 --> 00:06:23,390
‫Entonces, ese próximo middleware.

123
00:06:23,390 --> 00:06:26,650
‫Bueno, como siempre, usamos el siguiente.

124
00:06:26,650 --> 00:06:29,430
‫Pero esta vez usamos next de una manera especial.

125
00:06:29,430 --> 00:06:32,100
‫Porque ahora necesitamos pasar ese error a la

126
00:06:32,100 --> 00:06:35,190
‫siguiente, por lo que si la siguiente función recibe

127
00:06:35,190 --> 00:06:37,460
‫un argumento, no importa cuál sea,

128
00:06:37,460 --> 00:06:40,680
‫Express sabrá automáticamente que hubo un error, por lo que

129
00:06:40,680 --> 00:06:43,620
‫asumirá que todo lo que pasemos a continuación

130
00:06:43,620 --> 00:06:44,950
‫será una error.

131
00:06:44,950 --> 00:06:48,300
‫Y eso se aplica a cada función siguiente en cada

132
00:06:48,300 --> 00:06:50,803
‫middleware en cualquier lugar de nuestra aplicación.

133
00:06:51,950 --> 00:06:54,800
‫Entonces, nuevamente, cada vez que pasamos algo al siguiente, asumirá

134
00:06:54,800 --> 00:06:57,250
‫que es un error, y luego omitirá todos

135
00:06:57,250 --> 00:06:59,670
‫los demás middlewares en la pila de

136
00:06:59,670 --> 00:07:02,250
‫middleware y enviará el error que pasamos a nuestro

137
00:07:02,250 --> 00:07:04,680
‫middleware de manejo de errores global, que luego

138
00:07:04,680 --> 00:07:06,680
‫, por supuesto, ser ejecutado.

139
00:07:08,030 --> 00:07:10,090
‫Y entonces pasemos ahora el

140
00:07:10,090 --> 00:07:12,350
‫error que saltará nuevamente, todos los demás

141
00:07:12,350 --> 00:07:15,393
‫middlewares en la pila e ir directamente a este.

142
00:07:16,850 --> 00:07:18,430
‫Ahora bien, en este caso,

143
00:07:18,430 --> 00:07:21,210
‫en realidad no hay otro middleware en el medio, ¿de acuerdo?

144
00:07:21,210 --> 00:07:23,060
‫Entonces, en realidad, es solo el

145
00:07:23,060 --> 00:07:25,950
‫siguiente aquí, pero si usáramos next y pasáramos un error en

146
00:07:25,950 --> 00:07:28,603
‫otro lugar, entonces, por supuesto, funcionará de la misma manera.

147
00:07:29,720 --> 00:07:31,940
‫Y ahora probemos todo esto simplemente

148
00:07:31,940 --> 00:07:35,077
‫intentando acceder a una ruta que no estaba definida.

149
00:07:35,077 --> 00:07:38,460
‫Y entonces eso activará todo este código aquí, saltará al

150
00:07:38,460 --> 00:07:41,190
‫middleware de manejo de errores y luego

151
00:07:41,190 --> 00:07:43,700
‫enviará la respuesta basada en toda esta

152
00:07:43,700 --> 00:07:44,773
‫lógica aquí.

153
00:07:47,420 --> 00:07:52,130
‫Entonces, aquí todavía tenemos nuestra ruta incorrecta o inexistente y

154
00:07:52,130 --> 00:07:55,220
‫comencemos por llamar a esta, que aún

155
00:07:55,220 --> 00:07:57,023
‫debería estar funcionando, está

156
00:07:59,850 --> 00:08:01,650
‫bien, solo para confirmar

157
00:08:01,650 --> 00:08:05,050
‫que todo funciona bien y lo hace, y

158
00:08:05,050 --> 00:08:06,810
‫ahora esta.

159
00:08:06,810 --> 00:08:11,250
‫Y, de hecho, no podemos encontrar recorridos de barra de API en este servidor, por

160
00:08:11,250 --> 00:08:13,810
‫lo que nuestro middleware de manejo de errores global

161
00:08:13,810 --> 00:08:15,560
‫está realmente haciendo su trabajo.

162
00:08:15,560 --> 00:08:19,560
‫Perfecto, ese es el primer paso para implementar realmente un

163
00:08:19,560 --> 00:08:22,370
‫mecanismo de manejo de errores mucho mejor

164
00:08:22,370 --> 00:08:24,200
‫en nuestra aplicación.

165
00:08:24,200 --> 00:08:26,830
‫Así que ahora podríamos seguir adelante e intentar implementar este

166
00:08:26,830 --> 00:08:29,460
‫tipo de cosas aquí, en todas partes en todos

167
00:08:29,460 --> 00:08:30,310
‫nuestros controladores.

168
00:08:30,310 --> 00:08:34,160
‫Por ejemplo, aquí en todas estas funciones que tenemos

169
00:08:34,160 --> 00:08:35,060
‫aquí.

170
00:08:35,060 --> 00:08:37,410
‫Entonces reemplazando todo lo que tenemos aquí con

171
00:08:37,410 --> 00:08:38,850
‫este tipo de error.

172
00:08:38,850 --> 00:08:41,460
‫Pero lo que quiero hacer por ahora es crear

173
00:08:41,460 --> 00:08:42,920
‫nuestra propia clase de error.

174
00:08:42,920 --> 00:08:46,330
‫Para que no tengamos que escribir todo este código aquí y,

175
00:08:46,330 --> 00:08:49,280
‫en su lugar, tengamos una clase más optimizada de

176
00:08:49,280 --> 00:08:50,113
‫nosotros mismos.

177
00:08:50,113 --> 00:08:53,350
‫Esa es una práctica común, y hagámoslo en el

178
00:08:53,350 --> 00:08:54,283
‫siguiente video.

