﻿1
00:00:01,070 --> 00:00:01,950
‫Instructor: ¡Está bien!

2
00:00:01,950 --> 00:00:04,040
‫Y ahora, para terminar

3
00:00:04,040 --> 00:00:07,043
‫esta sección, aprendamos a detectar excepciones no detectadas.

4
00:00:08,660 --> 00:00:11,930
‫Pero, ¿qué son exactamente las excepciones no detectadas?

5
00:00:11,930 --> 00:00:15,290
‫Bueno, todos los errores, o llamémoslos también bugs, que ocurren

6
00:00:15,290 --> 00:00:17,280
‫en nuestro código síncrono pero

7
00:00:17,280 --> 00:00:21,230
‫que no se manejan en ninguna parte se llaman excepciones no detectadas.

8
00:00:21,230 --> 00:00:25,340
‫Y al igual que antes, al igual que con los rechazos no controlados,

9
00:00:25,340 --> 00:00:28,730
‫también tenemos una forma de manejar las excepciones no detectadas.

10
00:00:28,730 --> 00:00:30,720
‫Permítanme mostrarles rápidamente un

11
00:00:30,720 --> 00:00:32,823
‫ejemplo de una excepción no detectada.

12
00:00:34,370 --> 00:00:37,400
‫Así que simplemente finjamos que estamos tratando

13
00:00:37,400 --> 00:00:40,423
‫de consolar. registrar algo que no existe.

14
00:00:42,110 --> 00:00:46,600
‫Y de inmediato, obtenemos este error aquí, x no está definido, y luego,

15
00:00:46,600 --> 00:00:50,080
‫de manera predeterminada, obtenemos este seguimiento de pila completo aquí

16
00:00:50,080 --> 00:00:51,960
‫impreso en la consola.

17
00:00:51,960 --> 00:00:52,793
‫Está bien.

18
00:00:52,793 --> 00:00:57,660
‫Y ahora, para arreglar esto, esto es muy similar a hacer los

19
00:00:57,660 --> 00:00:59,380
‫rechazos no manejados.

20
00:00:59,380 --> 00:01:02,040
‫De nuevo, estamos escuchando un evento, esta

21
00:01:02,040 --> 00:01:04,040
‫vez se llama uncaughtException.

22
00:01:08,662 --> 00:01:11,912
‫Y, por supuesto, debe estar entre comillas.

23
00:01:12,840 --> 00:01:17,390
‫Y luego, como antes, pasamos nuestra función de devolución de llamada.

24
00:01:17,390 --> 00:01:18,223
‫Bueno.

25
00:01:18,223 --> 00:01:20,960
‫Y ahora, en realidad, lo que estamos haciendo aquí es muy similar

26
00:01:20,960 --> 00:01:22,350
‫a lo que hicimos aquí.

27
00:01:22,350 --> 00:01:24,970
‫Así que queremos bloquear el error en

28
00:01:24,970 --> 00:01:29,690
‫la consola para que luego aparezca en los registros de nuestro servidor, ¿de acuerdo?

29
00:01:29,690 --> 00:01:32,430
‫Entonces, dándonos una forma de solucionar el problema.

30
00:01:32,430 --> 00:01:35,223
‫Y luego queremos cerrar correctamente el servidor.

31
00:01:36,750 --> 00:01:39,010
‫Entonces, bueno, en realidad aquí

32
00:01:39,010 --> 00:01:41,590
‫quiero imprimir el error completo en la consola,

33
00:01:41,590 --> 00:01:43,940
‫y no solo el mensaje, ¿de acuerdo?

34
00:01:43,940 --> 00:01:45,993
‫Y también cambiemos el orden aquí, pero

35
00:01:47,300 --> 00:01:48,660
‫eso es todo.

36
00:01:48,660 --> 00:01:50,140
‫Entonces el resto es el mismo.

37
00:01:50,140 --> 00:01:51,290
‫¡Y

38
00:01:53,310 --> 00:01:58,310
‫aquí está, por supuesto, una EXCEPCIÓN SIN ATENCIÓN!

39
00:01:58,320 --> 00:02:01,810
‫Ahora podría refactorizar esto aquí en una buena

40
00:02:01,810 --> 00:02:05,020
‫función, pero manténgalo así, ¿de acuerdo?

41
00:02:05,020 --> 00:02:07,123
‫Bien, ahora volvamos a ejecutar esto.

42
00:02:08,330 --> 00:02:11,090
‫Entonces, echemos un vistazo a lo que tenemos aquí.

43
00:02:11,090 --> 00:02:13,700
‫¡Y de hecho, ahora vemos una EXCEPCIÓN SIN ATENCIÓN!

44
00:02:13,700 --> 00:02:14,780
‫Apagando.

45
00:02:14,780 --> 00:02:15,750
‫¿Está bien?

46
00:02:15,750 --> 00:02:18,770
‫Y de hecho, esto vuelve a imprimir toda la pila

47
00:02:18,770 --> 00:02:21,400
‫en la consola, pero realmente no quiero eso.

48
00:02:21,400 --> 00:02:22,660
‫No me gusta eso.

49
00:02:22,660 --> 00:02:25,860
‫Así que volvamos a lo que teníamos aquí.

50
00:02:25,860 --> 00:02:28,683
‫Así que err. nombre y luego err. mensaje.

51
00:02:30,890 --> 00:02:32,610
‫Bien, y ahora tenemos

52
00:02:32,610 --> 00:02:36,290
‫el ReferenceError que x no está definido, ¿de acuerdo?

53
00:02:36,290 --> 00:02:38,520
‫Y pongamos lo mismo aquí.

54
00:02:38,520 --> 00:02:39,983
‫Así como era antes.

55
00:02:40,950 --> 00:02:41,783
‫Está bien.

56
00:02:41,783 --> 00:02:43,070
‫Y eso es todo lo

57
00:02:43,070 --> 00:02:45,370
‫que hay que hacer para detectar excepciones no detectadas.

58
00:02:45,370 --> 00:02:48,180
‫Ahora, mientras estamos aquí en el rechazo no

59
00:02:48,180 --> 00:02:51,230
‫controlado, bloquear la aplicación como lo hicimos aquí es

60
00:02:51,230 --> 00:02:53,630
‫opcional, cuando hay una excepción no

61
00:02:53,630 --> 00:02:57,150
‫detectada, realmente, realmente necesitamos bloquear nuestra aplicación porque después de que

62
00:02:57,150 --> 00:02:59,970
‫hubo una excepción no detectada, todo el proceso

63
00:02:59,970 --> 00:03:01,610
‫del nodo está en

64
00:03:01,610 --> 00:03:04,370
‫un estado tan -Llamado estado inmundo, ¿de acuerdo?

65
00:03:04,370 --> 00:03:07,770
‫Y para solucionar eso, el proceso debe terminar

66
00:03:07,770 --> 00:03:09,940
‫y luego reiniciarse, ¿de acuerdo?

67
00:03:09,940 --> 00:03:11,330
‫Y nuevamente, en

68
00:03:11,330 --> 00:03:13,460
‫producción, deberíamos tener una herramienta en

69
00:03:13,460 --> 00:03:16,640
‫su lugar que reiniciará la aplicación después de fallar.

70
00:03:16,640 --> 00:03:19,270
‫Y muchos servicios de alojamiento ya lo hacen

71
00:03:19,270 --> 00:03:20,860
‫de inmediato, ¿de acuerdo?

72
00:03:20,860 --> 00:03:23,170
‫Entonces, de forma completamente automática sin que

73
00:03:23,170 --> 00:03:24,980
‫tengamos que hacer nada.

74
00:03:24,980 --> 00:03:27,820
‫Ahora, en Node. js, no es

75
00:03:27,820 --> 00:03:31,580
‫una buena práctica confiar ciegamente en estos dos controladores de errores

76
00:03:31,580 --> 00:03:34,170
‫que acabamos de implementar aquí, ¿de acuerdo?

77
00:03:34,170 --> 00:03:36,470
‫Por lo tanto, lo ideal es que los errores

78
00:03:36,470 --> 00:03:38,120
‫se manejen justo donde ocurren.

79
00:03:38,120 --> 00:03:42,150
‫Entonces, por ejemplo, en el problema de conexión a la base de datos, por

80
00:03:42,150 --> 00:03:44,660
‫supuesto, deberíamos agregar un controlador de captura allí y

81
00:03:44,660 --> 00:03:46,480
‫no simplemente confiar en la

82
00:03:46,480 --> 00:03:50,160
‫devolución de llamada de rechazo no controlada que tenemos aquí, ¿de acuerdo?

83
00:03:50,160 --> 00:03:53,600
‫Y algunas personas incluso dicen que no deberíamos usarlos en absoluto, pero no estoy

84
00:03:53,600 --> 00:03:54,770
‫de acuerdo con eso.

85
00:03:54,770 --> 00:03:58,090
‫Creo que como red de seguridad, digamos,

86
00:03:58,090 --> 00:04:02,470
‫pueden ser muy útiles y formar parte de nuestra aplicación.

87
00:04:02,470 --> 00:04:04,020
‫Ahora, en realidad, este controlador

88
00:04:04,020 --> 00:04:07,300
‫aquí debería estar en la parte superior de nuestro código, ¿de acuerdo?

89
00:04:07,300 --> 00:04:11,280
‫O al menos antes de que se ejecute realmente cualquier otro código.

90
00:04:11,280 --> 00:04:14,980
‫Porque mire lo que sucede si muevo esta línea de código aquí

91
00:04:14,980 --> 00:04:16,513
‫antes de este controlador.

92
00:04:17,350 --> 00:04:19,593
‫Entonces, si lo pongo aquí, por

93
00:04:21,140 --> 00:04:23,070
‫ejemplo, y luego lo

94
00:04:23,070 --> 00:04:24,680
‫guardo, entonces verá

95
00:04:24,680 --> 00:04:29,410
‫que nuestro controlador no detecta esta excepción, entonces este error aquí, ¿verdad?

96
00:04:29,410 --> 00:04:31,830
‫Y eso es porque solo aquí,

97
00:04:31,830 --> 00:04:35,010
‫al final, realmente comenzamos a escuchar una excepción no detectada.

98
00:04:35,010 --> 00:04:37,580
‫Pero en este caso, la excepción no

99
00:04:37,580 --> 00:04:40,380
‫detectada ocurre incluso antes de que escuchemos ese evento.

100
00:04:40,380 --> 00:04:44,630
‫Entonces, por lo tanto, no tenemos forma de atraparlo, ¿verdad?

101
00:04:44,630 --> 00:04:48,920
‫Entonces, idealmente deberíamos ponerlo aquí, justo en la parte superior, nuevamente antes de

102
00:04:48,920 --> 00:04:51,030
‫que se ejecute cualquier otro código.

103
00:04:51,030 --> 00:04:53,423
‫Especialmente el de nuestra aplicación.

104
00:04:54,580 --> 00:04:57,760
‫Así que pongámoslo aquí.

105
00:04:57,760 --> 00:04:59,550
‫Ahora el problema aquí

106
00:04:59,550 --> 00:05:02,820
‫será que el servidor no está definido en este punto.

107
00:05:02,820 --> 00:05:04,160
‫Pero eso no

108
00:05:04,160 --> 00:05:06,180
‫es un problema, porque en realidad no

109
00:05:06,180 --> 00:05:08,060
‫necesitamos el servidor aquí, ¿de acuerdo?

110
00:05:08,060 --> 00:05:09,480
‫Y eso se debe a

111
00:05:09,480 --> 00:05:11,270
‫que estos errores, por lo que estas

112
00:05:11,270 --> 00:05:13,670
‫excepciones no detectadas, no van a suceder de forma asincrónica.

113
00:05:13,670 --> 00:05:15,630
‫Entonces, en realidad, no van a

114
00:05:15,630 --> 00:05:17,660
‫tener nada que ver con el servidor.

115
00:05:17,660 --> 00:05:19,360
‫Entonces no necesitamos esto aquí en absoluto.

116
00:05:20,470 --> 00:05:22,250
‫Podemos simplemente guardarlo aquí,

117
00:05:22,250 --> 00:05:25,480
‫y ahora lo tenemos antes de que realmente necesitemos

118
00:05:25,480 --> 00:05:26,890
‫nuestra aplicación principal.

119
00:05:26,890 --> 00:05:28,663
‫Entonces, si ahora tenemos un

120
00:05:29,940 --> 00:05:31,850
‫error, intentémoslo primero aquí, para

121
00:05:31,850 --> 00:05:33,500
‫que veas que

122
00:05:33,500 --> 00:05:36,710
‫ahora volvemos a detectarlo en nuestro controlador de errores.

123
00:05:36,710 --> 00:05:41,333
‫Pero si ahora tuviéramos este código, por ejemplo dentro de app. js, digamos, realmente no importa,

124
00:05:42,350 --> 00:05:45,810
‫digamos que está aquí, y si ahora ejecutamos

125
00:05:45,810 --> 00:05:47,410
‫esto, entonces

126
00:05:47,410 --> 00:05:50,260
‫verá que todavía estamos detectando esa

127
00:05:50,260 --> 00:05:52,530
‫excepción en nuestro controlador de

128
00:05:52,530 --> 00:05:56,290
‫errores, lo que antes no sería el caso.

129
00:05:56,290 --> 00:05:57,180
‫¿Está bien?

130
00:05:57,180 --> 00:05:59,590
‫Y ahora solo para

131
00:05:59,590 --> 00:06:03,120
‫un experimento, ¿qué piensas si ponemos este código

132
00:06:03,120 --> 00:06:06,100
‫aquí en esta función de middleware?

133
00:06:06,100 --> 00:06:07,690
‫¿Qué crees que sucederá

134
00:06:07,690 --> 00:06:09,510
‫cuando guardemos este archivo ahora?

135
00:06:09,510 --> 00:06:12,200
‫Entonces x todavía no está definido en ninguna parte, pero

136
00:06:12,200 --> 00:06:13,840
‫echemos un vistazo a lo que

137
00:06:13,840 --> 00:06:15,373
‫sucede cuando ejecutamos este código.

138
00:06:16,980 --> 00:06:19,510
‫Y ahora, en realidad, no tenemos ningún error.

139
00:06:19,510 --> 00:06:21,300
‫O en realidad lo hacemos,

140
00:06:21,300 --> 00:06:24,130
‫pero eso se debe solo a nuestro rechazo no controlado,

141
00:06:24,130 --> 00:06:26,020
‫que se debe al hecho de

142
00:06:26,020 --> 00:06:27,920
‫que nuestra contraseña aquí todavía es incorrecta.

143
00:06:29,290 --> 00:06:32,170
‫Entonces, si lo guardamos y ahora lo volvemos a

144
00:06:32,170 --> 00:06:34,560
‫guardar, no debería ver ningún error.

145
00:06:34,560 --> 00:06:35,730
‫Y de hecho, no lo hacemos.

146
00:06:35,730 --> 00:06:36,953
‫¿Y por qué es eso?

147
00:06:37,830 --> 00:06:40,940
‫Bueno, es porque esta función de middleware aquí, por

148
00:06:40,940 --> 00:06:42,450
‫supuesto, solo se llama

149
00:06:42,450 --> 00:06:45,220
‫tan pronto como realmente hay una solicitud, ¿verdad?

150
00:06:45,220 --> 00:06:48,113
‫Entonces, veamos qué sucede cuando hacemos una solicitud.

151
00:06:50,760 --> 00:06:54,180
‫Entonces, hagamos una solicitud para obtener todos los recorridos.

152
00:06:54,180 --> 00:06:55,720
‫Y esperemos.

153
00:06:55,720 --> 00:06:58,980
‫Y aquí aparece el mensaje "¡Algo salió muy mal! "mensaje de error

154
00:06:58,980 --> 00:07:01,420
‫con el 500, y eso también se

155
00:07:01,420 --> 00:07:03,560
‫debe a que todavía estamos

156
00:07:03,560 --> 00:07:05,820
‫en modo de producción, ¿de acuerdo?

157
00:07:05,820 --> 00:07:08,990
‫Pero de todos modos, recibir este mensaje aquí, recuerde,

158
00:07:08,990 --> 00:07:12,120
‫significa que tenemos un error no operativo aquí.

159
00:07:12,120 --> 00:07:15,630
‫Básicamente, un error que no creamos nosotros mismos.

160
00:07:15,630 --> 00:07:19,580
‫Y entonces, justo aquí, ahora

161
00:07:19,580 --> 00:07:24,380
‫ingresamos aquí en nuestro errorController, vamos aquí, ¿verdad?

162
00:07:24,380 --> 00:07:28,780
‫Entonces, en esta otra rama aquí en la función sendErrorProd.

163
00:07:28,780 --> 00:07:30,380
‫Y de hecho, también

164
00:07:30,380 --> 00:07:32,970
‫ves el error aquí en la consola, ¿de acuerdo?

165
00:07:32,970 --> 00:07:35,600
‫Y eso es lo que sucede

166
00:07:35,600 --> 00:07:39,430
‫cuando hay un error dentro de cualquier middleware Express, ¿verdad?

167
00:07:39,430 --> 00:07:41,370
‫Entonces Express, cuando hay un error,

168
00:07:41,370 --> 00:07:44,480
‫automáticamente irá al middleware de manejo de errores con

169
00:07:44,480 --> 00:07:46,330
‫ese error, ¿de acuerdo?

170
00:07:46,330 --> 00:07:48,100
‫Y es por eso

171
00:07:48,100 --> 00:07:50,410
‫que cuando recibimos un error aquí en

172
00:07:50,410 --> 00:07:55,240
‫cualquiera de nuestras funciones de middleware, irá inmediatamente aquí en este controlador, ¿de acuerdo?

173
00:07:55,240 --> 00:07:56,520
‫Y como

174
00:07:56,520 --> 00:07:58,730
‫estamos en producción, ingresará a este

175
00:07:58,730 --> 00:08:00,994
‫bloque aquí, pero como no es

176
00:08:00,994 --> 00:08:03,700
‫un CastError, ni este error, ni un

177
00:08:03,700 --> 00:08:06,830
‫ValidationError, tan pronto como se envíe el error,

178
00:08:06,830 --> 00:08:09,640
‫aquí mismo, ingresaremos a este bloque. .

179
00:08:09,640 --> 00:08:14,640
‫Y nuevamente, es por eso que enviamos este error genérico, ¿de acuerdo?

180
00:08:15,235 --> 00:08:17,500
‫Ahora salgamos de este modo aquí

181
00:08:17,500 --> 00:08:20,053
‫y volvamos a nuestro inicio normal de npm.

182
00:08:22,310 --> 00:08:26,130
‫Y ahora mismo, nuestro error se enviará así, ¿verdad?

183
00:08:26,130 --> 00:08:29,440
‫Entonces enviar error de desarrollo nos dará todos los detalles

184
00:08:29,440 --> 00:08:31,773
‫sobre el error que está ocurriendo.

185
00:08:33,610 --> 00:08:38,490
‫Y ahora, de hecho, obtenemos ReferenceError: x no está definido.

186
00:08:38,490 --> 00:08:39,323
‫¿Okey?

187
00:08:39,323 --> 00:08:41,533
‫Así que en la aplicación. js, línea 21.

188
00:08:42,480 --> 00:08:46,300
‫Y entonces, la línea 21 es donde está,

189
00:08:46,300 --> 00:08:47,520
‫pero eliminémosla.

190
00:08:47,520 --> 00:08:49,760
‫Solo quería mostrártelo.

191
00:08:49,760 --> 00:08:51,350
‫¿Okey?

192
00:08:51,350 --> 00:08:53,770
‫De todos modos, con esto, cerramos nuestra

193
00:08:53,770 --> 00:08:55,620
‫sección de manejo de errores.

194
00:08:55,620 --> 00:08:58,830
‫Y podría haber un curso completo sobre manejo de

195
00:08:58,830 --> 00:09:01,940
‫errores con Node y Express, porque realmente es

196
00:09:01,940 --> 00:09:03,830
‫un tema increíblemente complejo.

197
00:09:03,830 --> 00:09:06,470
‫Pero, en esta sección, aprenderá lo esencial

198
00:09:06,470 --> 00:09:08,830
‫que necesita saber para comenzar realmente

199
00:09:08,830 --> 00:09:10,943
‫a crear aplicaciones asombrosas.

