﻿1
00:00:01,010 --> 00:00:02,650
‫Instructor masculino: Finalmente, ahora

2
00:00:02,650 --> 00:00:05,053
‫manejemos los errores de validación de Mongoose.

3
00:00:06,630 --> 00:00:09,750
‫Entonces, ¿recuerdas cómo intentamos actualizar un recorrido con algunos

4
00:00:09,750 --> 00:00:11,410
‫datos no válidos aquí

5
00:00:11,410 --> 00:00:13,890
‫y luego obtuvimos este tipo de error?

6
00:00:13,890 --> 00:00:15,160
‫Bueno.

7
00:00:15,160 --> 00:00:17,923
‫Y, de hecho, intentemos agregar otro.

8
00:00:19,890 --> 00:00:24,350
‫Entonces, un nombre que es muy corto, ¿de acuerdo?

9
00:00:24,350 --> 00:00:27,410
‫Y porque eso no está permitido, de nuevo.

10
00:00:27,410 --> 00:00:30,680
‫Ah, y ahora ya no podemos ver nuestro error

11
00:00:30,680 --> 00:00:33,000
‫porque ahora estamos en producción.

12
00:00:33,000 --> 00:00:34,750
‫Y, por supuesto, este error en este

13
00:00:34,750 --> 00:00:36,370
‫momento no se maneja correctamente.

14
00:00:36,370 --> 00:00:38,730
‫No está marcado como operativo.

15
00:00:38,730 --> 00:00:39,580
‫Y, por

16
00:00:39,580 --> 00:00:44,020
‫lo tanto, recuerde que recibimos este tipo de mensaje de error genérico.

17
00:00:44,020 --> 00:00:45,040
‫¿Okey?

18
00:00:45,040 --> 00:00:49,530
‫Entonces, solo para ver el error que teníamos antes,

19
00:00:49,530 --> 00:00:52,263
‫volvamos rápidamente al desarrollo.

20
00:00:53,810 --> 00:00:55,253
‫Entonces npm start.

21
00:00:58,950 --> 00:01:00,610
‫Y envíalo ahora

22
00:01:00,610 --> 00:01:01,810
‫de nuevo.

23
00:01:01,810 --> 00:01:05,220
‫Y ahora recuperamos nuestros errores de desarrollo, ¿de acuerdo?

24
00:01:05,220 --> 00:01:06,590
‫Porque ahora quiero

25
00:01:06,590 --> 00:01:10,410
‫mostrarles cómo podemos crear un mensaje de error significativo basado

26
00:01:10,410 --> 00:01:13,590
‫en todo esto, lo que tenemos aquí.

27
00:01:13,590 --> 00:01:14,670
‫Ahora a la derecha.

28
00:01:14,670 --> 00:01:16,690
‫Entonces, dentro de

29
00:01:16,690 --> 00:01:19,280
‫nuestro error, obtenemos propiedades de error.

30
00:01:19,280 --> 00:01:21,800
‫Y esa propiedad en sí es un

31
00:01:21,800 --> 00:01:24,540
‫objeto que tiene muchos objetos allí, y cada

32
00:01:24,540 --> 00:01:28,770
‫uno de ellos es para uno de los campos que tiene un error.

33
00:01:28,770 --> 00:01:29,790
‫¿Está bien?

34
00:01:29,790 --> 00:01:33,760
‫Entonces, el primero aquí es para la duración del recorrido.

35
00:01:33,760 --> 00:01:35,760
‫Entonces el segundo es por la dificultad,

36
00:01:35,760 --> 00:01:37,310
‫que también está mal.

37
00:01:37,310 --> 00:01:40,400
‫Y el tercero es para la calificación, ¿de acuerdo?

38
00:01:40,400 --> 00:01:44,520
‫Entonces, cada uno de estos tiene un mensaje de error agradable, ¿de acuerdo?

39
00:01:44,520 --> 00:01:48,210
‫Básicamente, el que definimos en nuestro esquema Mongoose.

40
00:01:48,210 --> 00:01:50,480
‫Y ahora queremos extraer estos

41
00:01:50,480 --> 00:01:52,490
‫tres mensajes de aquí

42
00:01:52,490 --> 00:01:55,920
‫y ponerlos todos en una sola cadena, ¿de acuerdo?

43
00:01:55,920 --> 00:01:58,593
‫Así que sigamos adelante y hagamos eso.

44
00:01:59,720 --> 00:02:00,553
‫Bueno.

45
00:02:00,553 --> 00:02:01,740
‫Y de

46
00:02:01,740 --> 00:02:05,363
‫nuevo, empezaré creando el condicional aquí abajo.

47
00:02:06,720 --> 00:02:07,553
‫Entonces, si

48
00:02:09,210 --> 00:02:10,760
‫(error), echemos un vistazo.

49
00:02:12,270 --> 00:02:14,290
‫Entonces aquí tenemos el error.

50
00:02:14,290 --> 00:02:16,413
‫Tenemos los errores, todos.

51
00:02:17,510 --> 00:02:19,840
‫Y necesito desplazarme aquí.

52
00:02:19,840 --> 00:02:22,320
‫Y sí, aquí está el nombre.

53
00:02:22,320 --> 00:02:26,300
‫Entonces error. el nombre es ValidationError, ¿de acuerdo?

54
00:02:26,300 --> 00:02:27,453
‫Así que agarremos eso.

55
00:02:32,150 --> 00:02:32,983
‫Bueno.

56
00:02:32,983 --> 00:02:36,010
‫Y, de nuevo, esto es un error creado por Mongoose.

57
00:02:36,010 --> 00:02:37,440
‫Así que al igual

58
00:02:37,440 --> 00:02:40,023
‫que el primero, y se ven similares, está bien.

59
00:02:41,150 --> 00:02:42,553
‫Ahora no quiero esto aquí.

60
00:02:43,400 --> 00:02:45,410
‫Pero, en cambio,

61
00:02:45,410 --> 00:02:48,863
‫quiero que el error sea igual a handleValidationErrorDB

62
00:02:54,290 --> 00:02:57,123
‫y envíe el error, ¿de acuerdo?

63
00:02:59,400 --> 00:03:00,933
‫Ahora copiemos esto de nuevo.

64
00:03:08,560 --> 00:03:09,840
‫Está bien.

65
00:03:09,840 --> 00:03:13,723
‫Y de nuevo, simplemente comencemos por crear nuestro mensaje.

66
00:03:19,090 --> 00:03:20,523
‫Datos de entrada no válidos.

67
00:03:23,060 --> 00:03:25,043
‫Y luego regresemos también el error.

68
00:03:27,520 --> 00:03:29,020
‫Entonces nuevo AppError (mensaje, 400).

69
00:03:30,275 --> 00:03:31,860
‫Entonces VS Code

70
00:03:31,860 --> 00:03:35,073
‫ya reconoció que quería escribir eso, ¿de acuerdo?

71
00:03:38,130 --> 00:03:40,280
‫Ahora, para crear una cadena

72
00:03:40,280 --> 00:03:43,400
‫grande de todas las cadenas de todos los

73
00:03:43,400 --> 00:03:46,330
‫errores, básicamente tenemos que recorrer todos estos

74
00:03:46,330 --> 00:03:51,180
‫objetos y luego extraer todos los mensajes de error en una nueva matriz.

75
00:03:51,180 --> 00:03:53,573
‫Así que, de nuevo, echemos un vistazo a eso.

76
00:03:54,440 --> 00:03:55,320
‫Bueno.

77
00:03:55,320 --> 00:03:58,430
‫Entonces, el objeto que tiene todos los

78
00:03:58,430 --> 00:04:01,290
‫objetos allí tiene errores, ¿de acuerdo?

79
00:04:01,290 --> 00:04:03,800
‫Así que tenemos un error para el nombre, uno

80
00:04:03,800 --> 00:04:05,870
‫para la dificultad y otro para ratingsAverage.

81
00:04:05,870 --> 00:04:09,923
‫Y así, básicamente, recorreremos este objeto de errores.

82
00:04:10,810 --> 00:04:11,660
‫¿Okey?

83
00:04:11,660 --> 00:04:14,190
‫Y en JavaScript, usamos Object. valores

84
00:04:14,190 --> 00:04:17,290
‫para básicamente recorrer un objeto.

85
00:04:17,290 --> 00:04:19,720
‫Entonces los elementos de un objeto.

86
00:04:19,720 --> 00:04:21,260
‫¿Está bien?

87
00:04:21,260 --> 00:04:25,000
‫Así que creemos una variable aquí llamada errores, que nuevamente

88
00:04:25,000 --> 00:04:26,700
‫será una matriz de todos

89
00:04:26,700 --> 00:04:28,583
‫los mensajes de error por ahora,

90
00:04:29,640 --> 00:04:32,963
‫y ahora Object. valores.

91
00:04:34,930 --> 00:04:38,863
‫Y entonces queremos los valores de err. errores, ¿de acuerdo?

92
00:04:41,540 --> 00:04:44,580
‫Y ahora recorrelos usando un mapa.

93
00:04:44,580 --> 00:04:46,160
‫Y luego, en

94
00:04:46,160 --> 00:04:50,220
‫cada iteración, simplemente devolveremos el mensaje de error, ¿de acuerdo?

95
00:04:50,220 --> 00:04:54,540
‫Entonces, solo para asegurarnos de que todos estamos en la

96
00:04:54,540 --> 00:04:59,470
‫misma página aquí, el Objeto. los valores son estos objetos, ¿de acuerdo?

97
00:04:59,470 --> 00:05:04,190
‫Entonces este objeto, y este objeto, y el siguiente, ¿de acuerdo?

98
00:05:04,190 --> 00:05:05,730
‫Entonces estos son los valores.

99
00:05:05,730 --> 00:05:06,930
‫Y ahora todo

100
00:05:06,930 --> 00:05:09,110
‫lo que tenemos que hacer para extraer

101
00:05:09,110 --> 00:05:12,210
‫el mensaje es decir valor. mensaje, ¿de acuerdo?

102
00:05:12,210 --> 00:05:13,533
‫Tan . mensaje.

103
00:05:16,410 --> 00:05:18,380
‫Básicamente, el valor actual, o digamos

104
00:05:18,380 --> 00:05:19,710
‫el elemento actual,

105
00:05:19,710 --> 00:05:21,653
‫me gusta usar el elemento para

106
00:05:22,640 --> 00:05:25,423
‫eso, y queremos devolver el. mensaje.

107
00:05:26,870 --> 00:05:27,703
‫Bueno.

108
00:05:28,940 --> 00:05:32,040
‫Y ahora, por supuesto, esto no debería estar aquí.

109
00:05:32,040 --> 00:05:34,140
‫Y probablemente ya lo habías notado.

110
00:05:35,260 --> 00:05:39,930
‫Entonces, de hecho, aquí es donde queremos esto, ¿de acuerdo?

111
00:05:39,930 --> 00:05:41,280
‫Y ahora todo lo

112
00:05:41,280 --> 00:05:45,163
‫que tenemos que hacer es introducir esto en nuestra cadena de mensajes, ¿de acuerdo?

113
00:05:46,830 --> 00:05:51,700
‫Entonces, errores, y ahora simplemente los unimos todos en

114
00:05:51,700 --> 00:05:56,700
‫una cadena usando un punto y luego un espacio, ¿de acuerdo?

115
00:05:56,930 --> 00:05:59,263
‫Y verá, en un segundo, por qué es así.

116
00:06:00,350 --> 00:06:01,183
‫Está bien.

117
00:06:02,590 --> 00:06:05,130
‫Así que volvamos a la producción aquí.

118
00:06:05,130 --> 00:06:07,483
‫Así que ejecutamos nuestro script de inicio de producción.

119
00:06:08,960 --> 00:06:12,083
‫Inténtelo de nuevo ahora y esperemos, ¡y

120
00:06:13,440 --> 00:06:14,310
‫bam!

121
00:06:14,310 --> 00:06:15,470
‫¡Aquí vamos!

122
00:06:15,470 --> 00:06:17,530
‫Tan datos de entrada inválidos.

123
00:06:17,530 --> 00:06:19,990
‫Luego, la primera cadena de error debe tener

124
00:06:19,990 --> 00:06:22,150
‫más o igual de 10 caracteres.

125
00:06:22,150 --> 00:06:23,810
‫Luego el

126
00:06:23,810 --> 00:06:26,040
‫segundo y el tercero.

127
00:06:26,040 --> 00:06:26,900
‫Perfecto.

128
00:06:26,900 --> 00:06:30,210
‫Y por eso usé el punto y el espacio, ¿de acuerdo?

129
00:06:30,210 --> 00:06:33,680
‫Entonces, básicamente, separar estas tres cadenas con un punto

130
00:06:33,680 --> 00:06:36,210
‫y un espacio, ¿de acuerdo?

131
00:06:36,210 --> 00:06:38,680
‫Y ahora esto parece un mensaje de

132
00:06:38,680 --> 00:06:41,693
‫error muy bien formateado que todos pueden entender fácilmente.

133
00:06:42,870 --> 00:06:43,703
‫¿Derecha?

134
00:06:43,703 --> 00:06:46,180
‫Entonces, básicamente hemos terminado aquí.

135
00:06:46,180 --> 00:06:47,013
‫Está bien.

136
00:06:47,013 --> 00:06:49,890
‫Ahora podríamos haber cometido este error, manejo del

137
00:06:49,890 --> 00:06:52,120
‫error, mucho más completo aún.

138
00:06:52,120 --> 00:06:56,640
‫Por ejemplo, podríamos definir diferentes niveles de gravedad de error como decir,

139
00:06:56,640 --> 00:06:59,130
‫este error no es tan importante, este

140
00:06:59,130 --> 00:07:01,130
‫error es de importancia

141
00:07:01,130 --> 00:07:04,770
‫media y este error es muy importante o incluso crítico.

142
00:07:04,770 --> 00:07:08,400
‫Y también podríamos enviar un correo electrónico a algún

143
00:07:08,400 --> 00:07:10,430
‫administrador sobre errores críticos.

144
00:07:10,430 --> 00:07:14,120
‫Y realmente, hay muchas cosas que podríamos implementar.

145
00:07:14,120 --> 00:07:18,300
‫Pero de nuevo, en una especie de aplicación pequeña como esta, lo

146
00:07:18,300 --> 00:07:21,810
‫que tenemos aquí ya es realmente bueno, ¿de acuerdo?

147
00:07:21,810 --> 00:07:24,410
‫Así que esta es una estrategia bastante

148
00:07:24,410 --> 00:07:25,970
‫sólida que ya hemos

149
00:07:25,970 --> 00:07:29,150
‫implementado aquí, y estoy muy contento con ella, ¿de acuerdo?

150
00:07:29,150 --> 00:07:32,520
‫Así que toda esta lógica aquí con los errores

151
00:07:32,520 --> 00:07:34,200
‫operativos que implementamos

152
00:07:34,200 --> 00:07:36,393
‫aquí, eso ya es bastante sofisticado.

153
00:07:37,250 --> 00:07:38,083
‫¿Okey?

154
00:07:39,290 --> 00:07:42,190
‫Ahora bien, si alguna vez encontráramos otro error que

155
00:07:42,190 --> 00:07:44,420
‫queramos marcar como operativo, entonces, por supuesto,

156
00:07:44,420 --> 00:07:46,410
‫todo lo que tendríamos que

157
00:07:46,410 --> 00:07:50,120
‫hacer es algo similar a lo que tenemos aquí, ¿de acuerdo?

158
00:07:50,120 --> 00:07:53,750
‫Entonces, básicamente, implemente otra función para esa, y luego

159
00:07:53,750 --> 00:07:56,630
‫devuelva nuestro propio error operativo para

160
00:07:56,630 --> 00:07:58,620
‫que la producción de error

161
00:07:58,620 --> 00:08:01,580
‫de envío pueda enviar ese error operativo

162
00:08:01,580 --> 00:08:03,473
‫al cliente, ¿verdad?

163
00:08:04,320 --> 00:08:06,580
‫De acuerdo, y dicho esto,

164
00:08:06,580 --> 00:08:09,080
‫nuestro controlador de errores está realmente terminado.

165
00:08:09,080 --> 00:08:12,010
‫Pero todavía hay algunos otros errores que debemos

166
00:08:12,010 --> 00:08:16,090
‫manejar y que están completamente fuera de Mongo o incluso de Express.

167
00:08:16,090 --> 00:08:19,123
‫Y así lo haremos en el resto de esta sección.

