﻿1
00:00:01,050 --> 00:00:02,840
‫Instructor: Ahora hagamos un mayor

2
00:00:02,840 --> 00:00:04,780
‫uso de nuestro negocio de clase

3
00:00:04,780 --> 00:00:07,400
‫AppError agregando un par de errores 404 y algunas

4
00:00:07,400 --> 00:00:09,493
‫de nuestras funciones de controlador de recorrido.

5
00:00:10,446 --> 00:00:12,740
‫Ahora, solo una cosa que

6
00:00:12,740 --> 00:00:16,030
‫quería decir antes de implementar estos errores 404

7
00:00:16,030 --> 00:00:19,640
‫es que, por supuesto, podríamos haber usado la función

8
00:00:19,640 --> 00:00:22,290
‫catchAsync también en nuestro enrutador, ¿de acuerdo?

9
00:00:22,290 --> 00:00:24,940
‫Entonces, déjame mostrarte cómo funcionaría.

10
00:00:24,940 --> 00:00:27,090
‫Entonces, aquí en

11
00:00:27,090 --> 00:00:29,730
‫TourRoutes, podría haber envuelto

12
00:00:30,750 --> 00:00:34,530
‫esta función aquí en catchAsync así en

13
00:00:34,530 --> 00:00:38,480
‫lugar de hacerlo aquí en el controlador.

14
00:00:38,480 --> 00:00:41,400
‫Entonces, aquí donde lo hice de hecho, ¿verdad?

15
00:00:41,400 --> 00:00:44,200
‫Y eso habría tenido exactamente el mismo resultado,

16
00:00:44,200 --> 00:00:45,950
‫pero no lo

17
00:00:45,950 --> 00:00:48,190
‫hice de esta manera porque así,

18
00:00:48,190 --> 00:00:50,110
‫tengo que recordar cuál de

19
00:00:50,110 --> 00:00:52,350
‫estos métodos aquí es en realidad

20
00:00:52,350 --> 00:00:54,800
‫un método de sincronización, está bien, de

21
00:00:54,800 --> 00:00:58,960
‫modo que solo en esos agrego la función catchAsync , ¿Derecha?

22
00:00:58,960 --> 00:01:02,150
‫Ahora, en este caso, en realidad todos son funciones

23
00:01:02,150 --> 00:01:05,700
‫asincrónicas y, por lo tanto, ese no es realmente el problema

24
00:01:05,700 --> 00:01:07,530
‫aquí en este ejemplo, pero

25
00:01:07,530 --> 00:01:11,150
‫habrá algunos ejemplos más adelante en los que no todos los

26
00:01:11,150 --> 00:01:12,170
‫controladores son

27
00:01:12,170 --> 00:01:14,020
‫funciones asincrónicas y, por lo tanto,

28
00:01:14,020 --> 00:01:17,100
‫en ese caso, realmente tendría para recordar cuál de

29
00:01:17,100 --> 00:01:18,600
‫ellos tengo que envolver

30
00:01:18,600 --> 00:01:20,450
‫en catchAsync y cuáles no,

31
00:01:20,450 --> 00:01:23,930
‫y así, hacerlo en el controlador es mucho más fácil

32
00:01:23,930 --> 00:01:25,520
‫porque simplemente cada vez

33
00:01:25,520 --> 00:01:27,190
‫que escribo una función asíncrona

34
00:01:27,190 --> 00:01:30,220
‫aquí, ya lo saben bien, necesito ajustar en catchAsync.

35
00:01:30,220 --> 00:01:31,350
‫Bueno.

36
00:01:31,350 --> 00:01:32,880
‫Entonces, no lo voy a

37
00:01:32,880 --> 00:01:36,400
‫hacer aquí, solo lo hago como les mostré en el último video.

38
00:01:36,400 --> 00:01:39,680
‫De acuerdo, una vez me encontré con un error que

39
00:01:39,680 --> 00:01:41,330
‫fue muy difícil de

40
00:01:41,330 --> 00:01:43,160
‫encontrar porque en realidad envolví

41
00:01:43,160 --> 00:01:45,690
‫una función que no era asíncrona en catchAsync

42
00:01:45,690 --> 00:01:47,850
‫y, por lo tanto, realmente no

43
00:01:47,850 --> 00:01:50,350
‫funcionamos y no pude averiguar dónde estaba el

44
00:01:50,350 --> 00:01:52,830
‫error y desperdicié mucho tiempo en ese.

45
00:01:52,830 --> 00:01:56,820
‫Y así, desde entonces, ya no pongo catchAsync aquí, sino muy

46
00:01:56,820 --> 00:01:59,610
‫cerca de donde realmente lo necesito,

47
00:01:59,610 --> 00:02:02,860
‫tan cerca del código que en realidad es asincrónico.

48
00:02:02,860 --> 00:02:04,640
‫Bien, y habiendo

49
00:02:04,640 --> 00:02:07,820
‫dicho eso, ahora implementemos algunos errores 404 aquí.

50
00:02:07,820 --> 00:02:09,680
‫Muy bien, quiero

51
00:02:09,680 --> 00:02:11,680
‫comenzar mostrándoles nuevamente el ejemplo

52
00:02:11,680 --> 00:02:13,830
‫que hicimos en el último video.

53
00:02:13,830 --> 00:02:16,350
‫Bien, intentamos hacer un recorrido

54
00:02:16,350 --> 00:02:19,780
‫para esta ID extraña que realmente no existe

55
00:02:19,780 --> 00:02:20,989
‫y el

56
00:02:20,989 --> 00:02:23,690
‫error que obtuvimos es que básicamente

57
00:02:23,690 --> 00:02:26,410
‫Mongoose no pudo convertir esta cadena

58
00:02:26,410 --> 00:02:29,630
‫aquí en una ID válida para MongoDB.

59
00:02:29,630 --> 00:02:33,653
‫Pero, ¿qué sucede cuando en realidad usamos un ID de MongoDB válido?

60
00:02:34,750 --> 00:02:38,003
‫Entonces, por ejemplo, vamos, sí, copiemos este aquí, está

61
00:02:38,003 --> 00:02:39,173
‫bien, y

62
00:02:41,660 --> 00:02:44,670
‫este, por supuesto, tendrá un resultado y, por

63
00:02:44,670 --> 00:02:47,770
‫lo tanto, cambiémoslo ligeramente, por ejemplo, cambiar esto

64
00:02:47,770 --> 00:02:50,060
‫a cero aquí seguirá siendo una

65
00:02:50,060 --> 00:02:52,340
‫ID válida , por lo que

66
00:02:52,340 --> 00:02:53,900
‫se ve así y

67
00:02:53,900 --> 00:02:56,000
‫se ve exactamente igual que

68
00:02:56,000 --> 00:02:57,440
‫antes, acabo de

69
00:02:57,440 --> 00:03:00,830
‫cambiar un número, pero esta identificación probablemente no exista.

70
00:03:00,830 --> 00:03:03,470
‫Entonces, veamos qué obtenemos.

71
00:03:03,470 --> 00:03:06,810
‫Y de hecho, ahora nuestro resultado aquí es nulo.

72
00:03:06,810 --> 00:03:10,340
‫Está bien, entonces, eso no es realmente lo que queremos, ¿verdad?

73
00:03:10,340 --> 00:03:14,550
‫Lo que queremos aquí es mostrar un código de estado 404 aquí y

74
00:03:14,550 --> 00:03:17,310
‫decir que no se encontró este recorrido.

75
00:03:17,310 --> 00:03:20,750
‫De acuerdo, usemos ahora la clase orAppError

76
00:03:20,750 --> 00:03:22,580
‫para implementar eso.

77
00:03:22,580 --> 00:03:24,040
‫Solo tenga en cuenta

78
00:03:24,040 --> 00:03:26,880
‫que el recorrido que volvemos aquí es nulo, ¿de acuerdo?

79
00:03:26,880 --> 00:03:29,453
‫Entonces, nulo que ahora podemos probar.

80
00:03:30,920 --> 00:03:33,533
‫Entonces, si vamos a nuestro controlador getTour,

81
00:03:35,260 --> 00:03:40,260
‫implementemos ahora si no hay un recorrido y en ese caso crearemos un

82
00:03:41,030 --> 00:03:43,390
‫error y esto aquí funciona porque

83
00:03:44,410 --> 00:03:45,243
‫si

84
00:03:45,243 --> 00:03:46,650
‫no hay un

85
00:03:46,650 --> 00:03:47,710
‫recorrido, será nulo.

86
00:03:47,710 --> 00:03:51,610
‫Recuerde y en JavaScript, nulo es un valor de falacia, por lo

87
00:03:51,610 --> 00:03:54,660
‫que un valor que se convertirá en falso aquí

88
00:03:54,660 --> 00:03:56,250
‫en una declaración if.

89
00:03:56,250 --> 00:03:58,060
‫Bien, y entonces, si no hay

90
00:03:58,060 --> 00:03:59,450
‫recorrido, entonces recorrido es

91
00:03:59,450 --> 00:04:01,790
‫falso y luego no falso es por supuesto

92
00:04:01,790 --> 00:04:04,830
‫verdadero y entonces, así es como ingresamos a este bloque if.

93
00:04:04,830 --> 00:04:07,600
‫Entonces, ¿qué queremos hacer si no hay gira?

94
00:04:07,600 --> 00:04:11,530
‫Bueno, queremos crear a continuación con un error.

95
00:04:11,530 --> 00:04:14,861
‫Entonces, para saltar directamente a o error y

96
00:04:14,861 --> 00:04:15,990
‫middleware vinculado.

97
00:04:15,990 --> 00:04:18,870
‫Entonces, hacemos un nuevo AppError que aún

98
00:04:20,610 --> 00:04:23,350
‫no está disponible, todavía tenemos

99
00:04:23,350 --> 00:04:26,120
‫que importarlo, pero usémoslo aquí de inmediato.

100
00:04:26,120 --> 00:04:27,950
‫De acuerdo, y luego

101
00:04:30,500 --> 00:04:34,673
‫digamos que no se encontró ningún recorrido con esa identificación.

102
00:04:35,580 --> 00:04:37,070
‫Y luego un código

103
00:04:37,070 --> 00:04:40,940
‫de estado, recuerde que el segundo argumento es 404, ¿de acuerdo?

104
00:04:40,940 --> 00:04:43,460
‫Ahora, una última cosa que tenemos que

105
00:04:43,460 --> 00:04:46,470
‫hacer aquí, que es decir regresar, está bien

106
00:04:46,470 --> 00:04:49,410
‫porque queremos devolver esta función inmediatamente y no

107
00:04:49,410 --> 00:04:52,250
‫pasar a la siguiente línea, que sería esta

108
00:04:52,250 --> 00:04:53,690
‫y que luego

109
00:04:53,690 --> 00:04:57,800
‫básicamente intentaría enviar dos respuestas y nosotros ya me encontré con ese

110
00:04:57,800 --> 00:05:00,210
‫error antes, así que espero que

111
00:05:00,210 --> 00:05:02,020
‫lo recuerdes y esa

112
00:05:02,020 --> 00:05:05,580
‫es la razón por la que siempre necesitamos regresar aquí.

113
00:05:05,580 --> 00:05:09,610
‫Bien, ahora vayamos a importar rápidamente el appError y eso

114
00:05:10,870 --> 00:05:13,200
‫es similar a este aquí, así

115
00:05:13,200 --> 00:05:14,823
‫que simplemente dupliquemos.

116
00:05:17,990 --> 00:05:21,203
‫Está bien, y aquí está en realidad con una A mayúscula.

117
00:05:22,170 --> 00:05:24,210
‫Muy bien, déjelo guardar y

118
00:05:24,210 --> 00:05:25,850
‫ahora intentémoslo nuevamente y

119
00:05:27,160 --> 00:05:31,450
‫ahora, de hecho, no se encontró ningún recorrido con ese ID 404.

120
00:05:31,450 --> 00:05:34,440
‫Perfecto, exactamente lo que queríamos.

121
00:05:34,440 --> 00:05:37,170
‫Ah, y también viste que aquí tenemos los fallidos.

122
00:05:37,170 --> 00:05:40,980
‫Bueno, eso también viene de la clase.

123
00:05:40,980 --> 00:05:44,270
‫Genial, eso funciona y realmente espero que a

124
00:05:44,270 --> 00:05:48,060
‫estas alturas haya entendido exactamente cómo funciona ahora todo

125
00:05:48,060 --> 00:05:50,370
‫este manejo de errores.

126
00:05:50,370 --> 00:05:53,300
‫De acuerdo, nuevamente creamos un error y luego

127
00:05:53,300 --> 00:05:55,450
‫pasamos ese error al siguiente y

128
00:05:55,450 --> 00:05:57,820
‫tan pronto como el siguiente recibe algo,

129
00:05:57,820 --> 00:05:59,880
‫se asume que es un

130
00:05:59,880 --> 00:06:00,757
‫error y

131
00:06:00,757 --> 00:06:03,630
‫saltará directamente al middleware de manejo de errores

132
00:06:03,630 --> 00:06:06,683
‫globales que luego nos enviará la respuesta. , ¿okey?

133
00:06:08,210 --> 00:06:09,850
‫Entonces, copiemos este

134
00:06:09,850 --> 00:06:12,410
‫y pongámoslo en todos los demás

135
00:06:12,410 --> 00:06:15,600
‫controladores que consultan documentos en función del ID.

136
00:06:15,600 --> 00:06:20,470
‫Entonces, no cree un recorrido, sino actualice un recorrido, ¿de acuerdo?

137
00:06:20,470 --> 00:06:21,380
‫Y así,

138
00:06:21,380 --> 00:06:23,120
‫aquí mismo, si estamos tratando de

139
00:06:23,120 --> 00:06:24,360
‫actualizar el recorrido que

140
00:06:24,360 --> 00:06:26,773
‫no existe, entonces nos dará exactamente el mismo error.

141
00:06:29,210 --> 00:06:32,470
‫Finalmente, por supuesto, lo mismo con eliminar.

142
00:06:32,470 --> 00:06:35,870
‫Y ahora ves que ESLint me dio este error aquí

143
00:06:35,870 --> 00:06:38,710
‫y eso es porque este recorrido no está

144
00:06:38,710 --> 00:06:41,730
‫definido y, en este caso, ESLint realmente me salvó

145
00:06:41,730 --> 00:06:43,660
‫aquí de crear este error.

146
00:06:43,660 --> 00:06:44,550
‫¿Derecha?

147
00:06:44,550 --> 00:06:46,790
‫Entonces, nuevamente sin ESLint, probablemente lo hubiera

148
00:06:46,790 --> 00:06:48,570
‫pegado aquí y lo hubiera

149
00:06:48,570 --> 00:06:49,920
‫terminado sin siquiera

150
00:06:49,920 --> 00:06:53,050
‫darme cuenta de que el recorrido no está definido

151
00:06:53,050 --> 00:06:54,600
‫en ninguna parte dentro de

152
00:06:54,600 --> 00:06:57,830
‫esta función, pero desde que instalamos esta herramienta realmente valiosa,

153
00:06:57,830 --> 00:06:59,970
‫ahora puedo seguir adelante y solucionarlo.

154
00:06:59,970 --> 00:07:01,820
‫Muy bien, hasta

155
00:07:01,820 --> 00:07:06,490
‫este punto, simplemente esperábamos esta instrucción de eliminación aquí y no

156
00:07:06,490 --> 00:07:08,460
‫guardamos el resultado y eso

157
00:07:08,460 --> 00:07:10,710
‫es simplemente porque no la necesitábamos.

158
00:07:10,710 --> 00:07:13,200
‫De acuerdo, pero en este momento realmente lo

159
00:07:13,200 --> 00:07:15,140
‫necesitamos porque queremos esta variable

160
00:07:15,140 --> 00:07:18,413
‫de recorrido para verificar si realmente hay un recorrido o no.

161
00:07:21,460 --> 00:07:23,760
‫Entonces, muy fácil, gira constante y luego igual

162
00:07:23,760 --> 00:07:25,350
‫a ese resultado, dale

163
00:07:25,350 --> 00:07:27,450
‫un guardado y luego el error desaparece.

164
00:07:28,610 --> 00:07:29,820
‫Que bien.

165
00:07:29,820 --> 00:07:32,770
‫ESLint en el trabajo, ¿de acuerdo?

166
00:07:32,770 --> 00:07:37,770
‫Ahora, tal vez haya notado que no agregué este error 404 aquí

167
00:07:37,950 --> 00:07:40,000
‫en este controlador getAllTour.

168
00:07:40,000 --> 00:07:41,910
‫Entonces, ¿por qué hice eso?

169
00:07:41,910 --> 00:07:43,620
‫Y déjame explicarte por qué.

170
00:07:43,620 --> 00:07:46,330
‫Entonces, cuando no se encuentran resultados, por

171
00:07:46,330 --> 00:07:50,530
‫ejemplo, no hay resultados que coincidan con un filtro, o porque se

172
00:07:50,530 --> 00:07:52,520
‫solicitó la página que

173
00:07:52,520 --> 00:07:55,970
‫no existe, entonces, por supuesto, podríamos considerar enviar un error

174
00:07:55,970 --> 00:07:58,550
‫404 y decir que los datos no

175
00:07:58,550 --> 00:08:01,220
‫fueron encontrado pero en mi opinión y

176
00:08:01,220 --> 00:08:03,760
‫también la opinión de otros desarrolladores, eso

177
00:08:03,760 --> 00:08:07,170
‫no es del todo correcto en esta solicitud porque

178
00:08:07,170 --> 00:08:09,240
‫realmente no hubo un error.

179
00:08:09,240 --> 00:08:11,950
‫Quiero decir, la solicitud fue recibida correctamente.

180
00:08:11,950 --> 00:08:14,550
‫La base de datos buscó correctamente los

181
00:08:14,550 --> 00:08:16,950
‫recorridos y encontró exactamente cero registros, por

182
00:08:16,950 --> 00:08:19,150
‫lo que estos cero registros

183
00:08:19,150 --> 00:08:23,250
‫son exactamente lo que enviaremos junto con el código HTTP 200.

184
00:08:23,250 --> 00:08:25,120
‫De acuerdo, de nuevo considero que

185
00:08:25,120 --> 00:08:27,300
‫realmente no puede haber un error cuando

186
00:08:27,300 --> 00:08:29,610
‫un usuario solicita todos los recorridos a menos

187
00:08:29,610 --> 00:08:32,680
‫que, por supuesto, haya alguna falla en la base de datos

188
00:08:32,680 --> 00:08:33,850
‫o algo así.

189
00:08:33,850 --> 00:08:35,210
‫Pero en ese

190
00:08:35,210 --> 00:08:37,600
‫caso, Mongoose automáticamente arrojará un error.

191
00:08:37,600 --> 00:08:40,950
‫Correcto, que a su vez será detectado por nuestra

192
00:08:40,950 --> 00:08:42,920
‫función o catchAsync y, como

193
00:08:42,920 --> 00:08:44,330
‫ya sabe, manejado en

194
00:08:44,330 --> 00:08:47,510
‫nuestro controlador de errores global y, como ya

195
00:08:47,510 --> 00:08:48,800
‫sabe, manejado

196
00:08:48,800 --> 00:08:52,000
‫en nuestro middleware de manejo de errores global.

197
00:08:52,000 --> 00:08:55,640
‫Muy bien, ya he dicho estas palabras tantas veces.

198
00:08:55,640 --> 00:08:57,717
‫De todos modos, espero

199
00:08:57,717 --> 00:09:01,113
‫que tenga sentido y, sí, sigamos adelante.

