﻿1
00:00:01,060 --> 00:00:03,440
‫Instructor: Entonces, Mongoose nos ofrece a

2
00:00:03,440 --> 00:00:05,823
‫los desarrolladores formas muy poderosas de validar

3
00:00:05,823 --> 00:00:08,280
‫los datos que ingresan a nuestro modelo.

4
00:00:08,280 --> 00:00:10,430
‫Entonces, en este video, aprenderá

5
00:00:10,430 --> 00:00:13,093
‫todo sobre la validación de datos con Mongoose.

6
00:00:14,870 --> 00:00:18,110
‫Ahora bien, ¿qué significa exactamente la validación?

7
00:00:18,110 --> 00:00:21,470
‫Bueno, la validación es básicamente verificar si los valores ingresados

8
00:00:21,470 --> 00:00:24,270
‫están en el formato correcto para cada

9
00:00:24,270 --> 00:00:27,430
‫campo en nuestro esquema de documento, y también si

10
00:00:27,430 --> 00:00:30,860
‫los valores realmente se ingresaron para todos los campos requeridos.

11
00:00:30,860 --> 00:00:33,940
‫Ahora, por otro lado, también tenemos la desinfección, que

12
00:00:33,940 --> 00:00:37,240
‫consiste en garantizar que los datos ingresados estén básicamente limpios,

13
00:00:37,240 --> 00:00:40,250
‫para que no se inyecte ningún código malicioso

14
00:00:40,250 --> 00:00:42,240
‫en nuestra base de

15
00:00:42,240 --> 00:00:44,330
‫datos o en la propia aplicación.

16
00:00:44,330 --> 00:00:47,470
‫Entonces, en ese paso, eliminamos los caracteres no deseados,

17
00:00:47,470 --> 00:00:50,730
‫o incluso el código, de los datos de entrada, ¿de acuerdo?

18
00:00:50,730 --> 00:00:53,210
‫Y este es en realidad un paso crucial,

19
00:00:53,210 --> 00:00:56,180
‫como un estándar de oro en el desarrollo de back-end.

20
00:00:56,180 --> 00:00:58,690
‫Nunca, nunca aceptar datos de entrada provenientes de

21
00:00:58,690 --> 00:01:00,690
‫un usuario tal como están.

22
00:01:00,690 --> 00:01:03,860
‫Por lo tanto, siempre debemos desinfectar esos datos entrantes.

23
00:01:03,860 --> 00:01:06,350
‫Pero, de todos modos, dejaré la desinfección de

24
00:01:06,350 --> 00:01:08,620
‫datos para la sección de seguridad del

25
00:01:08,620 --> 00:01:10,070
‫curso, para que en

26
00:01:10,070 --> 00:01:13,400
‫esta conferencia podamos centrarnos por completo en la validación de datos.

27
00:01:13,400 --> 00:01:15,430
‫Y estamos haciendo esta validación de datos

28
00:01:15,430 --> 00:01:17,240
‫aquí mismo en el modelo.

29
00:01:17,240 --> 00:01:20,130
‫Y eso, nuevamente, se debe al modelo gordo y

30
00:01:20,130 --> 00:01:22,110
‫la filosofía del controlador delgado,

31
00:01:22,110 --> 00:01:24,230
‫lo que hace que el modelo sea

32
00:01:24,230 --> 00:01:26,770
‫el lugar perfecto para realizar la validación, ¿verdad?

33
00:01:26,770 --> 00:01:29,540
‫Y, de hecho, Mongoose ya viene con un montón

34
00:01:29,540 --> 00:01:32,230
‫de herramientas de validación listas para usar.

35
00:01:32,230 --> 00:01:36,120
‫Entonces, hagamos ahora una validación de datos aquí.

36
00:01:36,120 --> 00:01:37,680
‫Y de hecho, ya lo hicimos.

37
00:01:37,680 --> 00:01:41,850
‫Entonces, cuando usamos este requisito aquí, en realidad ya es

38
00:01:41,850 --> 00:01:45,290
‫un validador de datos integrado, ¿de acuerdo?

39
00:01:45,290 --> 00:01:48,368
‫Entonces verá que usamos un validador como el requerido aquí

40
00:01:48,368 --> 00:01:50,970
‫en las opciones de tipo de esquema.

41
00:01:50,970 --> 00:01:54,340
‫Y required está disponible para todos los tipos de datos.

42
00:01:54,340 --> 00:01:56,870
‫Entonces, no solo cuerdas, sino realmente todo.

43
00:01:56,870 --> 00:02:00,010
‫Números, valores booleanos, fechas o, en realidad, el

44
00:02:00,010 --> 00:02:01,930
‫tipo que estés usando.

45
00:02:01,930 --> 00:02:04,970
‫Entonces también tenemos único aquí, pero tenga

46
00:02:04,970 --> 00:02:08,610
‫en cuenta que en realidad, técnicamente, no es un validador.

47
00:02:08,610 --> 00:02:10,170
‫Todavía producirá un error

48
00:02:10,170 --> 00:02:12,080
‫cuando tengamos un nombre duplicado, pero

49
00:02:12,080 --> 00:02:15,167
‫nuevamente, esto no es realmente un validador, ¿de acuerdo?

50
00:02:15,167 --> 00:02:17,790
‫Pero, se requiere un validador, por lo

51
00:02:17,790 --> 00:02:20,403
‫que ahora les mostraré otro que

52
00:02:20,403 --> 00:02:23,000
‫es específicamente solo para cadenas,

53
00:02:23,000 --> 00:02:26,870
‫que se llama longitud máxima y también longitud mínima.

54
00:02:26,870 --> 00:02:28,160
‫Entonces, tenemos la longitud

55
00:02:30,320 --> 00:02:32,830
‫máxima y, como dice el nombre, usamos esto

56
00:02:32,830 --> 00:02:35,470
‫para especificar la longitud máxima que puede tener una cadena.

57
00:02:35,470 --> 00:02:37,490
‫Y si es más largo que

58
00:02:37,490 --> 00:02:39,800
‫eso, entonces va a producir un error, ¿de acuerdo?

59
00:02:39,800 --> 00:02:42,936
‫Entonces, hagámoslo como lo hicimos antes con

60
00:02:42,936 --> 00:02:47,170
‫required, donde especificamos una matriz y luego establecemos el valor.

61
00:02:47,170 --> 00:02:50,940
‫Entonces, digamos que queremos 40 como la longitud máxima de la cadena,

62
00:02:50,940 --> 00:02:53,920
‫y luego agregamos el error después de eso.

63
00:02:53,920 --> 00:02:56,850
‫Entonces, básicamente, el mensaje de error que recibimos.

64
00:02:56,850 --> 00:03:01,093
‫Por lo tanto, el nombre de un recorrido debe tener

65
00:03:05,410 --> 00:03:08,693
‫menos de 40 caracteres o menos.

66
00:03:10,880 --> 00:03:13,320
‫Bien, esa es la longitud máxima, y

67
00:03:13,320 --> 00:03:15,673
‫luego también tenemos la longitud mínima.

68
00:03:18,600 --> 00:03:22,480
‫Muy bien, establezcamos uno en 10, por lo que

69
00:03:22,480 --> 00:03:27,480
‫el nombre de un recorrido debe tener más o menos 10 caracteres.

70
00:03:29,010 --> 00:03:33,590
‫De acuerdo, y así, así, tenemos estos dos validadores que en

71
00:03:33,590 --> 00:03:37,320
‫realidad solo están disponibles en cadenas, ¿de acuerdo?

72
00:03:37,320 --> 00:03:40,690
‫Y, entonces, sigamos adelante e intentemos eso.

73
00:03:40,690 --> 00:03:42,690
‫Entonces, voy a crear una nueva gira aquí.

74
00:03:44,570 --> 00:03:46,453
‫Y este no es un tour

75
00:03:48,050 --> 00:03:50,183
‫secreto, pero aquí el resto no importa.

76
00:03:53,550 --> 00:03:56,100
‫Llamaré a esto un Tour de prueba, y

77
00:03:56,100 --> 00:03:58,160
‫veamos cuántos personajes tenemos, así que

78
00:03:58,160 --> 00:04:00,280
‫cuatro más uno, más cuatro, por lo

79
00:04:00,280 --> 00:04:02,130
‫que solo tenemos nueve personajes.

80
00:04:02,130 --> 00:04:05,223
‫Por lo tanto, ahora deberíamos esperar obtener un error.

81
00:04:06,490 --> 00:04:07,980
‫Entonces, probemos eso.

82
00:04:07,980 --> 00:04:09,910
‫Y, de hecho, el nombre de

83
00:04:09,910 --> 00:04:12,460
‫un tour debe tener más o menos 10 caracteres.

84
00:04:12,460 --> 00:04:15,873
‫Genial, pero ahora, ¿qué hay de actualizar los tours?

85
00:04:17,290 --> 00:04:19,860
‫Entonces, consigamos uno de estos aquí.

86
00:04:19,860 --> 00:04:23,910
‫Entonces, tenemos este recorrido de prueba dos aquí, así

87
00:04:23,910 --> 00:04:25,963
‫que intentemos actualizar este.

88
00:04:27,540 --> 00:04:30,173
‫Entonces, vamos a nuestra ruta de actualización.

89
00:04:33,690 --> 00:04:38,023
‫Y ahora, cambiemos el nombre a Prueba, enviemos la

90
00:04:39,890 --> 00:04:43,240
‫solicitud y obtenemos el mismo error.

91
00:04:43,240 --> 00:04:45,540
‫Ahora, esto solo funciona debido a

92
00:04:45,540 --> 00:04:47,400
‫una configuración que establecimos

93
00:04:47,400 --> 00:04:50,600
‫hace mucho tiempo, cuando implementamos este controlador de actualización.

94
00:04:50,600 --> 00:04:53,853
‫Entonces, déjame mostrarte eso rápidamente en el controlador de viaje.

95
00:04:54,860 --> 00:04:57,846
‫Eliminar y actualizar, por lo que es debido

96
00:04:57,846 --> 00:05:00,255
‫a esta opción aquí runValidators, establecida

97
00:05:00,255 --> 00:05:03,180
‫en true, que los validadores se ejecutan nuevamente.

98
00:05:03,180 --> 00:05:04,959
‫Si lo configuro

99
00:05:04,959 --> 00:05:09,750
‫ahora como falso, Mongoose debería aceptar felizmente este nombre.

100
00:05:09,750 --> 00:05:12,673
‫Y de hecho, lo hace, está bien.

101
00:05:14,880 --> 00:05:17,072
‫Entonces, volvamos a establecerlo en algo

102
00:05:17,072 --> 00:05:18,453
‫más largo,

103
00:05:20,630 --> 00:05:24,073
‫no importa, está bien, y si lo vuelvo a

104
00:05:26,950 --> 00:05:29,070
‫establecer en verdadero, entonces no

105
00:05:29,070 --> 00:05:33,140
‫debería aceptarlo, y de hecho, recuperamos nuestro error, ¿de acuerdo?

106
00:05:33,140 --> 00:05:34,540
‫Entonces, solo quería

107
00:05:34,540 --> 00:05:36,763
‫mostrarle rápidamente el hecho de esa configuración.

108
00:05:38,820 --> 00:05:42,370
‫Está bien, y sí, ahora están funcionando.

109
00:05:42,370 --> 00:05:46,030
‫Probemos con un par de validadores más aquí.

110
00:05:46,030 --> 00:05:48,450
‫Por ejemplo, ahora en números.

111
00:05:48,450 --> 00:05:51,520
‫Entonces, vayamos aquí al promedio de calificaciones.

112
00:05:51,520 --> 00:05:53,370
‫Y sabemos que la calificación

113
00:05:53,370 --> 00:05:57,330
‫siempre debe estar entre uno y cero, y sabemos que una

114
00:05:57,330 --> 00:06:00,880
‫calificación siempre debe estar entre uno y cinco, ¿de acuerdo?

115
00:06:00,880 --> 00:06:03,680
‫Y así, muy similar a la longitud mínima y máxima,

116
00:06:03,680 --> 00:06:06,253
‫en los números simplemente tenemos mínimo y máximo.

117
00:06:08,350 --> 00:06:11,353
‫Entonces, el mínimo que queremos es uno, y luego

118
00:06:15,240 --> 00:06:17,253
‫nuevamente nuestro mensaje de error.

119
00:06:18,280 --> 00:06:23,280
‫Por lo tanto, la calificación debe estar por encima de 1. 0, digamos.

120
00:06:26,360 --> 00:06:29,643
‫Y luego el máximo es cinco.

121
00:06:34,040 --> 00:06:38,660
‫Debe estar por debajo de 5. 0, está bien, y probemos

122
00:06:38,660 --> 00:06:40,873
‫rápidamente este también.

123
00:06:43,300 --> 00:06:48,300
‫Entonces, al crear un nuevo recorrido, llamémoslo Test Tour

124
00:06:49,390 --> 00:06:53,933
‫Amazing porque tiene una calificación promedio de seis.

125
00:06:55,020 --> 00:06:57,680
‫Bien, veamos qué sucede entonces y, de

126
00:06:57,680 --> 00:07:00,380
‫hecho, la calificación debe estar por debajo de cinco.

127
00:07:00,380 --> 00:07:03,620
‫De acuerdo, eso de nuevo no va

128
00:07:03,620 --> 00:07:06,930
‫a funcionar y, por supuesto, tampoco puede ser cero.

129
00:07:06,930 --> 00:07:10,130
‫Entonces, debe estar por encima de uno y, por

130
00:07:10,130 --> 00:07:14,650
‫supuesto, con cuatro, va a funcionar, y de hecho, aquí está nuestro recorrido.

131
00:07:14,650 --> 00:07:18,180
‫A continuación, quiero restringir este valor de dificultad aquí

132
00:07:18,180 --> 00:07:20,090
‫a solo tres dificultades.

133
00:07:20,090 --> 00:07:22,480
‫Entonces, fácil, medio y difícil.

134
00:07:22,480 --> 00:07:24,660
‫Y si el usuario pone algo

135
00:07:24,660 --> 00:07:26,360
‫más, no funcionará.

136
00:07:26,360 --> 00:07:27,623
‫Entonces, probemos eso.

137
00:07:32,660 --> 00:07:36,420
‫Entonces, el validador que usamos para eso se llama enum, está

138
00:07:36,420 --> 00:07:38,850
‫bien, y aquí podemos pasar una

139
00:07:38,850 --> 00:07:41,403
‫matriz de los valores, básicamente, que están permitidos.

140
00:07:42,570 --> 00:07:47,570
‫Entonces, tenemos fácil, tenemos medio y tenemos dificultades.

141
00:07:49,550 --> 00:07:53,380
‫Muy bien, ahora también queremos especificar nuestro mensaje de error aquí,

142
00:07:53,380 --> 00:07:56,870
‫pero ahora mismo eso no es realmente posible, ¿verdad?

143
00:07:56,870 --> 00:07:59,490
‫Quiero decir, si agregamos otro argumento aquí, entonces

144
00:07:59,490 --> 00:08:01,330
‫eso no sería para

145
00:08:01,330 --> 00:08:05,540
‫el mensaje de error, por supuesto sería para otro valor posible, ¿de acuerdo?

146
00:08:05,540 --> 00:08:08,200
‫Entonces, la solución que tenemos que

147
00:08:08,200 --> 00:08:10,993
‫hacer aquí es crear otro objeto aquí,

148
00:08:11,900 --> 00:08:15,613
‫y luego, realmente especificar que estos son los valores.

149
00:08:18,870 --> 00:08:23,560
‫Y luego, nuestro mensaje, ¿de acuerdo?

150
00:08:23,560 --> 00:08:26,230
‫Y así es como funciona realmente.

151
00:08:26,230 --> 00:08:29,040
‫Esta notación aquí es en realidad

152
00:08:29,040 --> 00:08:32,763
‫solo una abreviatura de este objeto completo aquí, ¿de acuerdo?

153
00:08:34,760 --> 00:08:39,760
‫Entonces, la dificultad es: fácil, media o difícil.

154
00:08:45,280 --> 00:08:50,280
‫De acuerdo, ese es un validador muy bueno y muy útil que está disponible

155
00:08:50,323 --> 00:08:53,870
‫automáticamente en todas las cadenas, de acuerdo, así que no

156
00:08:53,870 --> 00:08:57,348
‫intente usar este aquí en números, por ejemplo.

157
00:08:57,348 --> 00:08:59,870
‫Esto es solo para cadenas.

158
00:08:59,870 --> 00:09:02,540
‫Y, por cierto, este mínimo y máximo

159
00:09:02,540 --> 00:09:04,450
‫aquí no es solo para

160
00:09:04,450 --> 00:09:07,820
‫números, sino que también funcionará con fechas, ¿de acuerdo?

161
00:09:07,820 --> 00:09:12,820
‫De todos modos, ahora finalmente probemos esto también.

162
00:09:13,180 --> 00:09:15,399
‫Entonces, necesitamos cambiar el nombre, y

163
00:09:15,399 --> 00:09:17,249
‫aquí pongamos algo más,

164
00:09:20,460 --> 00:09:23,233
‫está bien, y de hecho, obtenemos nuestro error.

165
00:09:24,770 --> 00:09:28,080
‫Si ahora lo ponemos fácil, entonces funciona.

166
00:09:28,080 --> 00:09:30,450
‫De acuerdo, y eso es todo lo que

167
00:09:30,450 --> 00:09:31,780
‫quería mostrarles aquí en

168
00:09:31,780 --> 00:09:35,110
‫esta conferencia, pero en realidad hay un montón de validadores más.

169
00:09:35,110 --> 00:09:38,259
‫Por ejemplo, en las cadenas tiene un validador de

170
00:09:38,259 --> 00:09:40,370
‫coincidencias para verificar si la

171
00:09:40,370 --> 00:09:43,090
‫entrada coincide con una expresión regular determinada.

172
00:09:43,090 --> 00:09:46,460
‫Pero, creo que estos que les acabo de mostrar

173
00:09:46,460 --> 00:09:49,250
‫aquí son los validadores integrados más importantes.

174
00:09:49,250 --> 00:09:51,450
‫Y, para obtener una lista completa

175
00:09:51,450 --> 00:09:54,530
‫de todos ellos, por supuesto, siempre puede consultar la documentación.

176
00:09:54,530 --> 00:09:57,590
‫Ahora también podemos especificar nuestros propios validadores, y eso

177
00:09:57,590 --> 00:09:59,790
‫es exactamente lo que haremos en

178
00:09:59,790 --> 00:10:01,363
‫el siguiente video.

