﻿1
00:00:00,920 --> 00:00:02,913
‫-: Como mencioné en el

2
00:00:02,913 --> 00:00:05,243
‫último video, hay tres tipos de errores

3
00:00:05,243 --> 00:00:07,525
‫que pueden ser creados por Mongoose

4
00:00:07,525 --> 00:00:10,520
‫en los que necesitamos marcar como errores operativos

5
00:00:10,520 --> 00:00:13,700
‫para que podamos enviar mensajes de error significativos a

6
00:00:13,700 --> 00:00:15,383
‫los clientes en producción.

7
00:00:16,890 --> 00:00:21,290
‫Y comencemos ahora simulando estos tres errores, ¿de acuerdo?

8
00:00:21,290 --> 00:00:25,263
‫Entonces, el primero es cuando probamos una ID no válida aquí,

9
00:00:26,240 --> 00:00:28,180
‫así que simplemente algo

10
00:00:28,180 --> 00:00:30,950
‫como esto, y Mongoose no podrá convertir

11
00:00:30,950 --> 00:00:33,427
‫esto en una ID de MongoDB, recuérdelo.

12
00:00:33,427 --> 00:00:36,799
‫Y este es el error que tenemos en este momento, y

13
00:00:36,799 --> 00:00:39,650
‫de hecho, aquí puedes ver todo el tipo

14
00:00:39,650 --> 00:00:42,950
‫de cosas que definimos que queríamos ver en las producciones.

15
00:00:42,950 --> 00:00:47,010
‫Entonces, el objeto de error completo, luego el mensaje de

16
00:00:47,010 --> 00:00:50,590
‫error y también la pila completa, ¿de acuerdo?

17
00:00:50,590 --> 00:00:53,180
‫Y este es un ejemplo perfecto de

18
00:00:53,180 --> 00:00:54,500
‫un error operativo.

19
00:00:54,500 --> 00:00:57,160
‫Entonces, esto es algo que muy bien

20
00:00:57,160 --> 00:01:00,060
‫podría suceder, por lo que debemos enviar una

21
00:01:00,060 --> 00:01:02,380
‫respuesta significativa para manejar este error.

22
00:01:02,380 --> 00:01:05,590
‫Y este es un ejemplo perfecto de un error operativo que es

23
00:01:05,590 --> 00:01:09,260
‫muy probable que le suceda en algún momento a un cliente, por lo

24
00:01:09,260 --> 00:01:11,740
‫que debemos manejarlo como uno solo, ¿de acuerdo?

25
00:01:11,740 --> 00:01:14,607
‫Entonces, básicamente enviando un mensaje de error agradable

26
00:01:14,607 --> 00:01:16,690
‫en lugar de algo como

27
00:01:16,690 --> 00:01:20,181
‫esto, lo que no significa nada para ningún cliente, ¿verdad?

28
00:01:20,181 --> 00:01:22,500
‫Bien, entonces el objetivo aquí

29
00:01:22,500 --> 00:01:26,120
‫de nuevo será básicamente marcar este error como operativo

30
00:01:26,120 --> 00:01:28,880
‫y crear un mensaje significativo, ¿de acuerdo?

31
00:01:28,880 --> 00:01:30,580
‫Pero antes de que podamos

32
00:01:30,580 --> 00:01:32,620
‫hacer eso, echemos un vistazo a los otros

33
00:01:32,620 --> 00:01:36,260
‫dos errores de Mongoose que también tendremos que marcar como operativos, ¿de acuerdo?

34
00:01:36,260 --> 00:01:38,457
‫Entonces, creemos un nuevo recorrido,

35
00:01:38,457 --> 00:01:43,236
‫y lo que voy a hacer es crear un nombre duplicado.

36
00:01:43,236 --> 00:01:46,210
‫Entonces, copiemos este aquí.

37
00:01:50,347 --> 00:01:52,503
‫Y creo que todos los valores

38
00:01:52,503 --> 00:01:54,780
‫aquí son correctos, así que intentemos esto ahora.

39
00:01:54,780 --> 00:01:58,520
‫Y de hecho, aquí nos sale el error que ya conocemos, que

40
00:01:58,520 --> 00:02:00,210
‫es un error de

41
00:02:00,210 --> 00:02:01,960
‫clave duplicada porque ya tenemos un

42
00:02:01,960 --> 00:02:05,740
‫recorrido, o un documento con el nombre de Forest Hiker, ¿de acuerdo?

43
00:02:05,740 --> 00:02:07,440
‫Entonces, nuevamente, este es un error

44
00:02:07,440 --> 00:02:09,420
‫que va a suceder en algún

45
00:02:09,420 --> 00:02:10,720
‫momento, y nuevamente,

46
00:02:10,720 --> 00:02:13,650
‫no tiene un mensaje de error muy significativo, ¿verdad?

47
00:02:13,650 --> 00:02:16,243
‫Y, de nuevo, tenemos que cambiar eso.

48
00:02:17,200 --> 00:02:19,954
‫Luego, el tercero también tiene que

49
00:02:19,954 --> 00:02:23,980
‫ver con la validación, así que hagámoslo aquí en Update Tour.

50
00:02:23,980 --> 00:02:27,835
‫Entonces, digamos que queremos tener un promedio de calificaciones de seis,

51
00:02:27,835 --> 00:02:30,700
‫lo cual sabemos que no es válido, ¿verdad?

52
00:02:30,700 --> 00:02:33,430
‫Porque dijimos que el máximo de ratingsAverage

53
00:02:33,430 --> 00:02:34,960
‫podría ser cinco.

54
00:02:34,960 --> 00:02:36,720
‫Entonces, veamos,

55
00:02:36,720 --> 00:02:40,891
‫y de hecho, obtenemos este ValidationError, ¿verdad?

56
00:02:40,891 --> 00:02:43,300
‫Entonces se llama ValidationError y

57
00:02:43,300 --> 00:02:47,600
‫tiene este objeto de errores con todos los errores.

58
00:02:47,600 --> 00:02:49,400
‫De hecho, pongamos otro aquí.

59
00:02:51,377 --> 00:02:53,183
‫Entonces, digamos dificultad,

60
00:02:55,229 --> 00:02:57,110
‫y luego algo más,

61
00:02:57,110 --> 00:02:59,981
‫que no sea fácil, medio o

62
00:02:59,981 --> 00:03:03,540
‫difícil, y ahora tenemos estos dos objetos aquí.

63
00:03:03,540 --> 00:03:08,090
‫Uno para las calificaciones y otro para la dificultad, ¿de acuerdo?

64
00:03:08,090 --> 00:03:09,800
‫Entonces, estos son

65
00:03:09,800 --> 00:03:11,740
‫los tres errores que marcaremos

66
00:03:11,740 --> 00:03:14,110
‫como operativos, comenzando con el primero,

67
00:03:14,110 --> 00:03:17,540
‫así que básicamente, el tipo CastError, ¿de acuerdo?

68
00:03:17,540 --> 00:03:20,250
‫Entonces, volvamos aquí, y haremos eso

69
00:03:20,250 --> 00:03:24,260
‫aquí, nuevamente, porque solo queremos hacer esto en producción, ¿de acuerdo?

70
00:03:24,260 --> 00:03:26,570
‫En desarrollo, no nos importa nada de esto.

71
00:03:26,570 --> 00:03:28,576
‫Todo lo que queremos hacer

72
00:03:28,576 --> 00:03:30,910
‫es ver nuestros errores para poder corregirlos básicamente,

73
00:03:30,910 --> 00:03:33,220
‫pero en producción, aquí es donde queremos

74
00:03:33,220 --> 00:03:36,110
‫enviar los mensajes de error significativos a los clientes.

75
00:03:36,110 --> 00:03:40,690
‫Entonces, digamos si err. name es igual

76
00:03:40,690 --> 00:03:45,690
‫a CastError, y así es como vamos a identificar este

77
00:03:45,980 --> 00:03:48,400
‫tipo de error aquí

78
00:03:48,400 --> 00:03:51,000
‫del que acabamos de hablar,

79
00:03:51,000 --> 00:03:55,300
‫porque tiene el nombre de CastError, ¿de acuerdo?

80
00:03:55,300 --> 00:03:57,564
‫Así que si err. el nombre

81
00:03:57,564 --> 00:04:02,230
‫es CastError, bueno, entonces llamaremos a una función especial que

82
00:04:02,230 --> 00:04:03,880
‫crearemos en un

83
00:04:03,880 --> 00:04:06,097
‫segundo, que se llama handleCastError.

84
00:04:10,750 --> 00:04:14,290
‫Y luego también diré aquí DB para base de datos, para

85
00:04:14,290 --> 00:04:18,320
‫que sepamos que esto está relacionado con nuestra base de datos, ¿de acuerdo?

86
00:04:18,320 --> 00:04:19,920
‫Y así es como va a funcionar.

87
00:04:19,920 --> 00:04:21,470
‫Vamos a pasar

88
00:04:21,470 --> 00:04:23,683
‫el error que creó Mongoose a

89
00:04:24,720 --> 00:04:27,070
‫esta función, así que así, y esto

90
00:04:27,070 --> 00:04:30,840
‫devolverá un nuevo error creado sin la clase AppError, ¿de acuerdo?

91
00:04:30,840 --> 00:04:33,930
‫Y ese error se marcará como operativo,

92
00:04:33,930 --> 00:04:36,120
‫porque recuerde, todos nuestros AppErrors

93
00:04:36,120 --> 00:04:38,030
‫tienen las propiedades

94
00:04:38,030 --> 00:04:40,523
‫operativas establecidas en dos automáticamente, ¿verdad?

95
00:04:41,820 --> 00:04:46,390
‫Entonces, esto devolverá un error, así que, guardémoslo, ¿de acuerdo?

96
00:04:46,390 --> 00:04:49,260
‫Y también lo estaban guardando en error.

97
00:04:49,260 --> 00:04:51,050
‫Ahora bien, no es

98
00:04:51,050 --> 00:04:54,700
‫una buena práctica anular los argumentos de una función, ¿de acuerdo?

99
00:04:54,700 --> 00:04:57,930
‫Entonces, el error proviene de esta función de error del medio, ¿verdad?

100
00:04:57,930 --> 00:05:01,020
‫Entonces, a partir de aquí, y en lugar de

101
00:05:01,020 --> 00:05:03,217
‫hacer eso, realmente crearé una

102
00:05:03,217 --> 00:05:06,516
‫copia impresa de ese objeto de error, ¿de acuerdo?

103
00:05:06,516 --> 00:05:09,760
‫Así que let, y estoy usando let, y no

104
00:05:09,760 --> 00:05:11,700
‫const, porque, por supuesto,

105
00:05:11,700 --> 00:05:14,043
‫reasignaremos un nuevo error más adelante aquí.

106
00:05:15,490 --> 00:05:18,820
‫Entonces, llamemos a este error en lugar de simplemente

107
00:05:18,820 --> 00:05:22,250
‫err, que es el nombre normal de los errores en Express.

108
00:05:22,250 --> 00:05:24,710
‫Y de nuevo, usaremos nuestro

109
00:05:24,710 --> 00:05:29,133
‫truco donde usamos la desestructuración del error original, ¿de acuerdo?

110
00:05:30,930 --> 00:05:34,257
‫Y así, de ahora en adelante, usaremos este error en lugar de err.

111
00:05:35,620 --> 00:05:38,963
‫Entonces aquí, y aquí, y aquí.

112
00:05:41,720 --> 00:05:42,770
‫¿Bien?

113
00:05:42,770 --> 00:05:44,890
‫Entonces, sigamos adelante

114
00:05:44,890 --> 00:05:47,223
‫y creemos esta función aquí.

115
00:05:49,580 --> 00:05:52,883
‫Pongamos eso aquí desde el principio.

116
00:05:56,247 --> 00:05:57,413
‫Bien.

117
00:05:58,270 --> 00:06:00,680
‫Trate de recordar que esto recibe

118
00:06:00,680 --> 00:06:04,210
‫un error, y ahora voy a volver a llamarlo err

119
00:06:04,210 --> 00:06:07,320
‫así, porque nuevamente ese es el estándar en Express.

120
00:06:07,320 --> 00:06:09,020
‫Y para comenzar, echemos

121
00:06:09,020 --> 00:06:12,910
‫un vistazo nuevamente al objeto de error aquí, ¿de acuerdo?

122
00:06:12,910 --> 00:06:17,910
‫Así que aquí tenemos el camino y también el valor, ¿de acuerdo?

123
00:06:18,290 --> 00:06:21,280
‫Entonces, la ruta aquí es básicamente el nombre del campo

124
00:06:21,280 --> 00:06:25,000
‫para el cual los datos de entrada están en el formato incorrecto, ¿de acuerdo?

125
00:06:25,000 --> 00:06:27,860
‫Y ese valor aquí es entonces este, que

126
00:06:27,860 --> 00:06:31,050
‫es, por supuesto, el que hicimos en el pasado, ¿de acuerdo?

127
00:06:31,050 --> 00:06:34,200
‫Entonces, esto podría suceder no solo para el ID, sino

128
00:06:34,200 --> 00:06:36,450
‫también para cualquier campo que consultamos

129
00:06:36,450 --> 00:06:39,370
‫con un valor en el formato incorrecto, ¿de acuerdo?

130
00:06:39,370 --> 00:06:41,270
‫Entonces, ahora básicamente creemos

131
00:06:41,270 --> 00:06:43,330
‫una cadena que diga que tenemos

132
00:06:43,330 --> 00:06:48,330
‫una ID no válida con el valor de este en este caso, ¿de acuerdo?

133
00:06:48,360 --> 00:06:53,360
‫Entonces, es camino y valor, ¿de acuerdo?

134
00:06:53,530 --> 00:06:55,873
‫Entonces, creemos un mensaje aquí y digamos Error

135
00:06:59,780 --> 00:07:01,770
‫no válido. camino es

136
00:07:08,328 --> 00:07:09,411
‫err. valor.

137
00:07:13,870 --> 00:07:15,250
‫¿Okey?

138
00:07:15,250 --> 00:07:17,813
‫Y ahora, simplemente devolvemos nuestro propio AppError.

139
00:07:18,990 --> 00:07:20,227
‫¿Okey?

140
00:07:20,227 --> 00:07:24,270
‫Así que como mencioné un par de veces, ¿de acuerdo?

141
00:07:24,270 --> 00:07:27,740
‫Entonces AppError, y de hecho tengo que incluirlo aquí,

142
00:07:27,740 --> 00:07:30,933
‫o requerirlo, porque todavía no lo hice.

143
00:07:31,940 --> 00:07:35,633
‫Entonces, const AppError es igual a require, y

144
00:07:39,150 --> 00:07:42,620
‫sube un nivel, luego a la carpeta de

145
00:07:42,620 --> 00:07:45,213
‫utilidades y luego a appError.

146
00:07:46,350 --> 00:07:47,183
‫Aquí está.

147
00:07:48,150 --> 00:07:52,570
‫Y ahora, en o AppError, pasamos nuestro mensaje y el

148
00:07:52,570 --> 00:07:56,860
‫código de estado 400, que significa Solicitud incorrecta.

149
00:07:56,860 --> 00:07:59,040
‫De acuerdo, y así, así, transformamos

150
00:07:59,040 --> 00:08:00,940
‫el extraño error que recibíamos

151
00:08:00,940 --> 00:08:02,640
‫de Mongoose en un error

152
00:08:02,640 --> 00:08:04,110
‫operativo con un mensaje

153
00:08:04,110 --> 00:08:06,354
‫agradable y amistoso que (se ríe)

154
00:08:06,354 --> 00:08:07,187
‫un

155
00:08:07,187 --> 00:08:09,343
‫humano real puede leer, ¿de acuerdo?

156
00:08:10,684 --> 00:08:13,270
‫De acuerdo, una última cosa que

157
00:08:13,270 --> 00:08:18,150
‫tenemos que cambiar aquí es establecer también este aquí en error, ¿de acuerdo?

158
00:08:18,150 --> 00:08:21,750
‫Y entonces, ahora mismo, si nuestro error es CastError,

159
00:08:21,750 --> 00:08:24,770
‫bueno, entonces pasaremos el error a esta

160
00:08:24,770 --> 00:08:27,790
‫función que devolverá nuestro AppError, entonces este,

161
00:08:27,790 --> 00:08:31,430
‫y ese es el que luego será enviado al

162
00:08:31,430 --> 00:08:34,180
‫cliente usando nuestro sendErrorProd, ¿okey?

163
00:08:34,180 --> 00:08:36,123
‫Entonces, intentemos ahora realmente eso.

164
00:08:37,080 --> 00:08:39,060
‫Así que aquí, en nuestro paquete. json,

165
00:08:39,060 --> 00:08:43,627
‫tenemos este script start: prod, así que intentémoslo.

166
00:08:43,627 --> 00:08:48,627
‫Entonces, npm run start: prod, y puedo completar automáticamente estos nombres de scripts

167
00:08:50,250 --> 00:08:54,580
‫npm usando la pestaña aquí en la terminal, ¿de acuerdo?

168
00:08:54,580 --> 00:08:56,420
‫Entonces, esto iniciará un

169
00:08:56,420 --> 00:08:59,640
‫proceso en modo de producción, básicamente, ¿de acuerdo?

170
00:08:59,640 --> 00:09:01,060
‫Entonces, intentemos esto de nuevo.

171
00:09:01,060 --> 00:09:02,580
‫Entonces, si ahora está haciendo

172
00:09:02,580 --> 00:09:04,350
‫esta solicitud, deberíamos recuperar el mensaje

173
00:09:04,350 --> 00:09:07,500
‫de error que acabamos de crear, porque ahora mismo, estamos en producción.

174
00:09:07,500 --> 00:09:10,060
‫Y de hecho, aquí está.

175
00:09:10,060 --> 00:09:12,530
‫Entonces tenemos inválido, y luego el nombre del campo, o

176
00:09:12,530 --> 00:09:15,010
‫en realidad el nombre de la ruta, y luego el

177
00:09:15,010 --> 00:09:15,843
‫valor que ingresamos.

178
00:09:17,130 --> 00:09:19,194
‫Entonces, si probamos

179
00:09:19,194 --> 00:09:21,730
‫algo diferente, obtenemos esto y,

180
00:09:21,730 --> 00:09:25,450
‫por supuesto, también nuestro código 400 Bad Request.

181
00:09:25,450 --> 00:09:26,650
‫Ok genial.

182
00:09:26,650 --> 00:09:28,533
‫Entonces, este ahora está manejado.

183
00:09:28,533 --> 00:09:32,210
‫En la próxima lección, nos ocuparemos de la siguiente, que

184
00:09:32,210 --> 00:09:35,440
‫es para nombres de campo duplicados, ¿de acuerdo?

185
00:09:35,440 --> 00:09:36,890
‫Entonces, nos vemos en un segundo.

