﻿1
00:00:01,100 --> 00:00:02,750
‫Maestro: En este video,

2
00:00:02,750 --> 00:00:05,470
‫ahora creemos una clase de error mejor y más

3
00:00:05,470 --> 00:00:07,373
‫útil, y también hagamos una refactorización.

4
00:00:09,210 --> 00:00:11,870
‫Y comenzando con esa clase de

5
00:00:11,870 --> 00:00:15,053
‫error, creemos un nuevo archivo en nuestra carpeta Utilidades.

6
00:00:15,950 --> 00:00:18,990
‫Entonces, nuevo archivo, y lo llamaré

7
00:00:20,980 --> 00:00:25,820
‫AppError porque ese será el nombre de la clase, ¿de acuerdo?

8
00:00:25,820 --> 00:00:30,820
‫Entonces, clase AppError, y en realidad queremos que todos nuestros

9
00:00:30,867 --> 00:00:34,780
‫objetos AppError hereden del error incorporado,

10
00:00:34,780 --> 00:00:39,260
‫por lo que extendamos la clase de error incorporada.

11
00:00:39,260 --> 00:00:43,720
‫Entonces, usamos Extended Error, ¿de acuerdo?

12
00:00:43,720 --> 00:00:46,870
‫Entonces, hicimos eso antes en algún lugar de

13
00:00:46,870 --> 00:00:50,950
‫este curso, y nuevamente, estas son solo clases de ES6, ¿de acuerdo?

14
00:00:50,950 --> 00:00:52,920
‫En este caso, herencia de

15
00:00:52,920 --> 00:00:56,790
‫clases, donde una clase hereda de la otra, ¿de acuerdo?

16
00:00:56,790 --> 00:00:59,300
‫Luego, como siempre, nuestro constructor y lo

17
00:00:59,300 --> 00:01:01,800
‫que vamos a pasar a un

18
00:01:01,800 --> 00:01:04,490
‫nuevo objeto creado a partir de la

19
00:01:04,490 --> 00:01:08,660
‫clase AppError serán el mensaje y el statusCode, así que solo

20
00:01:08,660 --> 00:01:09,853
‫estos dos.

21
00:01:11,330 --> 00:01:15,130
‫Bien, recuerde que se llama al método constructor cada

22
00:01:15,130 --> 00:01:19,210
‫vez que creamos un nuevo objeto fuera de esta clase.

23
00:01:19,210 --> 00:01:22,116
‫Ahora, como de costumbre, cuando extendemos

24
00:01:22,116 --> 00:01:25,760
‫una clase padre, llamamos super para llamar al constructor

25
00:01:25,760 --> 00:01:28,203
‫padre, de acuerdo, y lo

26
00:01:30,100 --> 00:01:33,580
‫hacemos con mensaje porque el mensaje es en

27
00:01:33,580 --> 00:01:37,160
‫realidad el único parámetro que acepta el error incorporado.

28
00:01:37,160 --> 00:01:40,990
‫Bien, entonces esto es básicamente, estás, como, llamando

29
00:01:40,990 --> 00:01:44,305
‫a error, está bien, y luego

30
00:01:44,305 --> 00:01:46,160
‫esto es lo

31
00:01:48,300 --> 00:01:53,030
‫habitual, configuramos el statusCode en statusCode, de acuerdo, y ahora

32
00:01:53,030 --> 00:01:56,463
‫también queremos establecer el estado en sí.

33
00:01:58,200 --> 00:02:01,670
‫Por lo tanto, recuerde que el estado puede ser fallido

34
00:02:01,670 --> 00:02:03,920
‫o error, y podríamos pasar eso al

35
00:02:03,920 --> 00:02:05,700
‫objeto, pero tampoco es

36
00:02:05,700 --> 00:02:08,530
‫realmente necesario, porque el estado depende del statusCode.

37
00:02:08,530 --> 00:02:10,880
‫Entonces, cuando el statusCode es 400,

38
00:02:10,880 --> 00:02:12,630
‫entonces el estado fallará,

39
00:02:12,630 --> 00:02:16,230
‫y si es 500, entonces será un error, correcto,

40
00:02:16,230 --> 00:02:18,336
‫y eso simplemente prueba si

41
00:02:18,336 --> 00:02:20,420
‫el statusCode comienza con cuatro.

42
00:02:20,420 --> 00:02:23,800
‫Entonces, en JavaScript, hay un método startsWith al que podemos llamar

43
00:02:23,800 --> 00:02:25,540
‫cadenas, y creo que esa

44
00:02:25,540 --> 00:02:28,100
‫es la forma más fácil de hacer esta

45
00:02:28,100 --> 00:02:31,363
‫prueba, y eso es básicamente convertir el código de estado en

46
00:02:32,780 --> 00:02:35,610
‫una cadena, y para eso simplemente estoy usando un plantilla

47
00:02:35,610 --> 00:02:38,030
‫de cadena con el código allí, así que

48
00:02:38,030 --> 00:02:40,380
‫esto, o en realidad podemos usar statusCode.

49
00:02:41,781 --> 00:02:42,614
‫Entonces, statusCode,

50
00:02:47,001 --> 00:02:48,750
‫y luego startsWith, aquí también

51
00:02:48,750 --> 00:02:51,120
‫necesitamos una cadena, y si el statusCode como

52
00:02:51,120 --> 00:02:54,330
‫cadena comienza con un cuatro, bueno, entonces tenemos un error.

53
00:02:54,330 --> 00:02:58,360
‫Y aquí, usemos el ternario, está bien, entonces

54
00:02:58,360 --> 00:03:02,120
‫falla cuando comienza con un cuatro,

55
00:03:02,120 --> 00:03:06,890
‫y de lo contrario es un error, ¿de acuerdo?

56
00:03:06,890 --> 00:03:09,550
‫Entonces, es muy simple, y esto ya

57
00:03:09,550 --> 00:03:13,250
‫nos ahorra tener que pasar manualmente ya sea fallar o error.

58
00:03:13,250 --> 00:03:15,240
‫Muy bien, ahora a continuación,

59
00:03:15,240 --> 00:03:17,120
‫todos los errores que

60
00:03:17,120 --> 00:03:20,300
‫crearemos usando esta clase serán todos errores operativos.

61
00:03:20,300 --> 00:03:22,070
‫Entonces, los errores que

62
00:03:22,070 --> 00:03:24,130
‫podemos predecir sucederán en algún momento

63
00:03:24,130 --> 00:03:26,010
‫en el futuro, como por ejemplo,

64
00:03:26,010 --> 00:03:29,560
‫un usuario que crea un recorrido sin los campos obligatorios, ¿verdad?

65
00:03:29,560 --> 00:03:32,380
‫Así que ese es un error operativo, está

66
00:03:32,380 --> 00:03:34,660
‫bien, y nuevamente, de ahora en

67
00:03:34,660 --> 00:03:37,125
‫adelante, siempre usaremos esta clase AppError aquí

68
00:03:37,125 --> 00:03:39,070
‫que estamos creando ahora

69
00:03:39,070 --> 00:03:42,230
‫mismo para crear todos los errores en nuestra aplicación.

70
00:03:42,230 --> 00:03:44,730
‫Entonces, estos errores serán errores operativos, por lo que

71
00:03:44,730 --> 00:03:46,250
‫lo que voy a hacer

72
00:03:46,250 --> 00:03:49,663
‫ahora es crear también un archivo. Es propiedad operativa aquí.

73
00:03:50,980 --> 00:03:53,133
‫Así que esto. está operativo

74
00:03:56,100 --> 00:03:57,380
‫y configúrelo como verdadero.

75
00:03:57,380 --> 00:03:59,240
‫Entonces, todos nuestros errores harán

76
00:03:59,240 --> 00:04:01,680
‫que esta propiedad se establezca en verdadera,

77
00:04:01,680 --> 00:04:03,420
‫y lo estoy

78
00:04:03,420 --> 00:04:05,890
‫haciendo para que luego podamos probar esta

79
00:04:05,890 --> 00:04:07,910
‫propiedad y solo enviar mensajes

80
00:04:07,910 --> 00:04:10,360
‫de error al cliente para estos errores

81
00:04:10,360 --> 00:04:12,510
‫operativos que creamos usando esta clase.

82
00:04:12,510 --> 00:04:14,550
‫Y esto es útil porque

83
00:04:14,550 --> 00:04:17,210
‫algunos otros errores inesperados que pueden ocurrir en

84
00:04:17,210 --> 00:04:19,964
‫nuestra aplicación, por ejemplo, un error de programación,

85
00:04:19,964 --> 00:04:22,360
‫o algún error en uno de los

86
00:04:22,360 --> 00:04:24,550
‫paquetes que requerimos en nuestra aplicación,

87
00:04:24,550 --> 00:04:26,100
‫y estos errores,

88
00:04:26,100 --> 00:04:29,610
‫por supuesto, no tendrán esto. es una propiedad

89
00:04:29,610 --> 00:04:31,610
‫operativa en ellos, de acuerdo, y

90
00:04:31,610 --> 00:04:33,370
‫puede sonar un poco confuso

91
00:04:33,370 --> 00:04:35,220
‫en este punto, pero no

92
00:04:35,220 --> 00:04:37,040
‫se preocupe, tendrá mucho sentido

93
00:04:37,040 --> 00:04:39,860
‫cuando implementemos esa parte que acabo de mencionar.

94
00:04:39,860 --> 00:04:43,740
‫Entonces, probando esto. Es propiedad operativa aquí.

95
00:04:43,740 --> 00:04:46,190
‫Muy bien, y ahora solo un último

96
00:04:46,190 --> 00:04:50,270
‫paso es que en realidad también necesitamos capturar el seguimiento de la pila.

97
00:04:50,270 --> 00:04:53,090
‫Ahora, ¿qué quiero decir con seguimiento de pila?

98
00:04:53,090 --> 00:04:55,430
‫Entonces, permítanme mostrarles eso, entonces, mostrarles

99
00:04:55,430 --> 00:04:58,380
‫qué es el seguimiento de la pila, y

100
00:04:58,380 --> 00:05:01,093
‫así lo registraré aquí en la consola.

101
00:05:02,180 --> 00:05:05,053
‫Consola. registro y error. stackTrace, por

102
00:05:06,390 --> 00:05:10,350
‫lo que todos y cada uno de los errores obtienen este seguimiento

103
00:05:10,350 --> 00:05:13,370
‫de pila, y en realidad es solo pila, está bien.

104
00:05:13,370 --> 00:05:15,820
‫Así que err. stack básicamente nos

105
00:05:15,820 --> 00:05:17,743
‫mostrará dónde ocurrió el error.

106
00:05:19,320 --> 00:05:20,743
‫Así que permítanme ejecutar

107
00:05:22,450 --> 00:05:24,303
‫esto aquí ahora, y echemos un

108
00:05:26,420 --> 00:05:28,000
‫vistazo a esto, y nos

109
00:05:28,000 --> 00:05:31,290
‫da aquí el error y luego también dónde sucedió, ¿de acuerdo?

110
00:05:31,290 --> 00:05:33,040
‫Entonces, en este caso aquí,

111
00:05:33,040 --> 00:05:36,390
‫por supuesto, agregue app. js en la línea 32.

112
00:05:36,390 --> 00:05:38,810
‫Entonces, aquí mismo.

113
00:05:38,810 --> 00:05:40,470
‫Entonces, ahí es donde

114
00:05:40,470 --> 00:05:42,200
‫creamos este error, y ahora está

115
00:05:42,200 --> 00:05:44,972
‫en nuestro seguimiento de pila, y también nos muestra

116
00:05:44,972 --> 00:05:49,972
‫la pila de llamadas completa aquí, que al final se originó en este error, ¿de acuerdo?

117
00:05:50,400 --> 00:05:52,440
‫Así que queremos preservar

118
00:05:52,440 --> 00:05:56,500
‫eso y al mismo tiempo no agregar este método aquí,

119
00:05:56,500 --> 00:06:00,390
‫o esta clase, a esa pista de pila, ¿de acuerdo?

120
00:06:00,390 --> 00:06:02,350
‫Y nuevamente, eso suena un poco

121
00:06:02,350 --> 00:06:03,980
‫confuso, lo sé, pero en

122
00:06:03,980 --> 00:06:06,359
‫este caso no es realmente importante, todo lo

123
00:06:06,359 --> 00:06:09,100
‫que importa es que agreguemos esta línea de código

124
00:06:09,100 --> 00:06:11,873
‫aquí, que es Error. capturestackTrace, exactamente lo

125
00:06:13,670 --> 00:06:16,160
‫que obtienes aquí, y primero

126
00:06:16,160 --> 00:06:19,490
‫necesitamos especificar el objeto actual, que es

127
00:06:19,490 --> 00:06:23,530
‫este, y luego la clase AppError en sí, que

128
00:06:23,530 --> 00:06:26,113
‫será este. constructor.

129
00:06:28,340 --> 00:06:31,220
‫De acuerdo, de esta manera, cuando se crea un nuevo

130
00:06:31,220 --> 00:06:34,361
‫objeto y se llama a una función constructora, esa llamada a

131
00:06:34,361 --> 00:06:36,388
‫la función no aparecerá en el

132
00:06:36,388 --> 00:06:38,863
‫seguimiento de la pila y no la contaminará.

133
00:06:40,240 --> 00:06:41,073
‫Muy

134
00:06:42,250 --> 00:06:44,920
‫bien, dejémoslo aquí, y

135
00:06:44,920 --> 00:06:48,280
‫sí, esa es nuestra clase AppError,

136
00:06:48,280 --> 00:06:51,363
‫y ahora exportémoslo desde aquí.

137
00:06:52,450 --> 00:06:56,443
‫Entonces, module. exportaciones es, por supuesto, AppError.

138
00:06:57,340 --> 00:07:00,367
‫Genial, solo una pregunta que puede tener es '¿Por

139
00:07:00,367 --> 00:07:04,720
‫qué no configuré esto? mensaje igual a mensaje? 'Bueno, eso

140
00:07:04,720 --> 00:07:07,600
‫es solo porque aquí mismo llamé a la

141
00:07:07,600 --> 00:07:10,253
‫clase padre, correcto, y la clase padre

142
00:07:10,253 --> 00:07:13,380
‫es error, y lo que sea que pasemos

143
00:07:13,380 --> 00:07:15,350
‫será la propiedad del mensaje.

144
00:07:15,350 --> 00:07:16,860
‫Así que como te dije antes.

145
00:07:16,860 --> 00:07:20,880
‫Y así, básicamente, aquí, al hacer esta llamada principal, ya configuramos

146
00:07:20,880 --> 00:07:22,890
‫la propiedad del mensaje en

147
00:07:22,890 --> 00:07:24,463
‫nuestro mensaje entrante.

148
00:07:25,970 --> 00:07:28,500
‫Muy bien, guardelo, y ahora podemos cerrarlo, ya

149
00:07:28,500 --> 00:07:29,653
‫no lo necesitamos,

150
00:07:30,770 --> 00:07:32,933
‫y aquí lo vamos a importar aquí.

151
00:07:34,621 --> 00:07:35,871
‫Const AppError,

152
00:07:38,980 --> 00:07:39,883
‫require,

153
00:07:41,560 --> 00:07:43,600
‫y luego está

154
00:07:43,600 --> 00:07:48,320
‫en utils, entonces Utilities y appError, está bien,

155
00:07:48,320 --> 00:07:51,423
‫y ahora vamos a usarlo.

156
00:07:53,280 --> 00:07:55,070
‫Comente este fragmento de código

157
00:07:55,070 --> 00:07:57,420
‫y, de hecho, elimine el que teníamos

158
00:07:58,860 --> 00:08:00,210
‫antes, y eso

159
00:08:00,210 --> 00:08:02,650
‫ahora creará el error aquí dentro del siguiente.

160
00:08:02,650 --> 00:08:04,433
‫Entonces, nuevo AppError, y luego

161
00:08:06,600 --> 00:08:07,783
‫el mensaje, que es

162
00:08:09,430 --> 00:08:10,793
‫este, y el código

163
00:08:12,910 --> 00:08:14,023
‫de estado.

164
00:08:15,620 --> 00:08:18,410
‫Correcto, y el error, recuerde,

165
00:08:18,410 --> 00:08:22,480
‫se resolverá automáticamente, así que eliminemos todo esto, démosle

166
00:08:22,480 --> 00:08:23,723
‫un guardado

167
00:08:25,320 --> 00:08:29,630
‫aquí y una vez más, pruebe esta ruta incorrecta, y

168
00:08:29,630 --> 00:08:32,940
‫de hecho, todavía obtenemos nuestro mismo error,

169
00:08:32,940 --> 00:08:37,530
‫y también seguimos obteniendo exactamente el mismo seguimiento de pila.

170
00:08:37,530 --> 00:08:40,280
‫Bien, y finalmente también quiero

171
00:08:40,280 --> 00:08:43,550
‫exportar este middleware aquí, ¿de acuerdo?

172
00:08:43,550 --> 00:08:45,260
‫Básicamente, este controlador porque a lo

173
00:08:45,260 --> 00:08:47,150
‫largo del resto de la sección,

174
00:08:47,150 --> 00:08:48,760
‫vamos a crear un par

175
00:08:48,760 --> 00:08:51,700
‫de funciones diferentes para manejar diferentes tipos de errores, así

176
00:08:51,700 --> 00:08:53,280
‫que quiero que todas

177
00:08:53,280 --> 00:08:55,912
‫estas funciones estén en el mismo archivo, ¿de acuerdo?

178
00:08:55,912 --> 00:08:58,920
‫Y podemos decir que todas estas funciones que

179
00:08:58,920 --> 00:09:02,310
‫acabo de mencionar son controladores, de acuerdo, y por

180
00:09:02,310 --> 00:09:05,320
‫lo tanto, controladores, también los llamamos controladores en

181
00:09:05,320 --> 00:09:08,240
‫el contexto de la arquitectura MVC, por lo

182
00:09:08,240 --> 00:09:10,130
‫que ahora creemos un

183
00:09:10,130 --> 00:09:13,253
‫archivo controlador de errores en nuestra carpeta de controladores.

184
00:09:14,190 --> 00:09:18,280
‫De acuerdo, y esto puede sonar o parecer un poco extraño porque en

185
00:09:18,280 --> 00:09:21,330
‫realidad no tenemos un recurso de error correcto, por lo

186
00:09:22,200 --> 00:09:24,940
‫que probablemente algunas personas no estarán de acuerdo conmigo

187
00:09:24,940 --> 00:09:26,923
‫en que este es el lugar

188
00:09:28,540 --> 00:09:31,100
‫correcto, pero personalmente me gusta hacerlo así porque

189
00:09:31,100 --> 00:09:32,520
‫en Al final

190
00:09:32,520 --> 00:09:34,910
‫del día, estas funciones, son un poco

191
00:09:34,910 --> 00:09:37,370
‫como para controlar nuestros errores, de acuerdo, así

192
00:09:37,370 --> 00:09:39,570
‫que para mí al menos tiene

193
00:09:39,570 --> 00:09:43,140
‫sentido simplemente llamar a esta función aquí el controlador de errores, y

194
00:09:43,140 --> 00:09:46,500
‫aquí quería pegar esa función de middleware , pero supongo que

195
00:09:46,500 --> 00:09:49,173
‫no lo copié, así que hagámoslo de nuevo.

196
00:09:51,010 --> 00:09:53,540
‫Está bien, y de hecho voy a exportar

197
00:09:53,540 --> 00:09:56,240
‫este aquí como módulo. exporta porque

198
00:09:56,240 --> 00:09:57,676
‫las otras funciones

199
00:09:57,676 --> 00:09:59,606
‫de control que crearemos

200
00:09:59,606 --> 00:10:02,440
‫más adelante, no las exportaré desde aquí.

201
00:10:02,440 --> 00:10:05,453
‫Así que simplemente van a ser ayudantes.

202
00:10:06,320 --> 00:10:11,320
‫Entonces, module. las exportaciones es igual a esta función, ¿de acuerdo?

203
00:10:12,210 --> 00:10:15,420
‫De hecho, eliminemos esta consola. inicie sesión aquí,

204
00:10:15,420 --> 00:10:18,510
‫guarde, y ahora de vuelta a nuestra aplicación,

205
00:10:18,510 --> 00:10:21,080
‫por supuesto, ahora necesitamos conectar esa

206
00:10:21,080 --> 00:10:23,040
‫función de middleware aquí.

207
00:10:23,040 --> 00:10:25,660
‫Entonces, sigamos adelante e importémoslo

208
00:10:26,700 --> 00:10:28,710
‫y puedo llamarlo como

209
00:10:28,710 --> 00:10:29,760
‫quiera,

210
00:10:30,802 --> 00:10:32,635
‫así que déjame llamarlo

211
00:10:34,679 --> 00:10:36,853
‫globalErrorHandler con una H

212
00:10:38,650 --> 00:10:39,840
‫mayúscula, y

213
00:10:42,300 --> 00:10:45,033
‫voy a requerir controladores y errorController.

214
00:10:49,700 --> 00:10:52,660
‫Vuelva a ponerlo aquí, y ahora para la prueba

215
00:10:52,660 --> 00:10:54,343
‫final después de esta refactorización.

216
00:10:55,810 --> 00:10:58,970
‫Veamos, y de hecho, una

217
00:10:58,970 --> 00:11:03,040
‫vez más, todo funciona bien, ¿de acuerdo?

218
00:11:03,040 --> 00:11:06,490
‫Entonces, perfecto, ese era el objetivo de este video, nos vemos

219
00:11:06,490 --> 00:11:07,690
‫en el siguiente.

