﻿1
00:00:01,060 --> 00:00:03,440
‫Instrutor: Portanto, o Mongoose oferece

2
00:00:03,440 --> 00:00:05,823
‫aos desenvolvedores maneiras muito poderosas de validar

3
00:00:05,823 --> 00:00:08,280
‫os dados que entram em nosso modelo.

4
00:00:08,280 --> 00:00:10,430
‫E então, neste vídeo, você aprenderá

5
00:00:10,430 --> 00:00:13,093
‫tudo sobre validação de dados com o Mongoose.

6
00:00:14,870 --> 00:00:18,110
‫Agora, o que exatamente significa validação realmente significa?

7
00:00:18,110 --> 00:00:21,470
‫Bem, a validação consiste basicamente em verificar se os valores

8
00:00:21,470 --> 00:00:24,270
‫inseridos estão no formato correto para cada

9
00:00:24,270 --> 00:00:27,430
‫campo em nosso esquema de documento e também se

10
00:00:27,430 --> 00:00:30,860
‫os valores foram realmente inseridos para todos os campos obrigatórios.

11
00:00:30,860 --> 00:00:33,940
‫Agora, por outro lado, também temos a higienização,

12
00:00:33,940 --> 00:00:37,240
‫que é para garantir que os dados inseridos estejam

13
00:00:37,240 --> 00:00:40,250
‫basicamente limpos, para que nenhum código malicioso seja

14
00:00:40,250 --> 00:00:42,240
‫injetado em nosso banco

15
00:00:42,240 --> 00:00:44,330
‫de dados ou no próprio aplicativo.

16
00:00:44,330 --> 00:00:47,470
‫Então, nessa etapa, removemos caracteres indesejados,

17
00:00:47,470 --> 00:00:50,730
‫ou mesmo código, dos dados de entrada, certo?

18
00:00:50,730 --> 00:00:53,210
‫E esta é realmente uma etapa crucial,

19
00:00:53,210 --> 00:00:56,180
‫como um padrão de ouro no desenvolvimento de back-end.

20
00:00:56,180 --> 00:00:58,690
‫Para nunca, jamais, aceitar dados de entrada vindos

21
00:00:58,690 --> 00:01:00,690
‫de um usuário como eles são.

22
00:01:00,690 --> 00:01:03,860
‫Portanto, sempre precisamos higienizar os dados recebidos.

23
00:01:03,860 --> 00:01:06,350
‫Mas, de qualquer forma, deixarei a higienização de

24
00:01:06,350 --> 00:01:08,620
‫dados para a seção de segurança do

25
00:01:08,620 --> 00:01:10,070
‫curso, para que

26
00:01:10,070 --> 00:01:13,400
‫nesta palestra possamos nos concentrar inteiramente na validação de dados.

27
00:01:13,400 --> 00:01:15,430
‫E estamos fazendo essa validação de

28
00:01:15,430 --> 00:01:17,240
‫dados bem aqui no modelo.

29
00:01:17,240 --> 00:01:20,130
‫E isso, novamente, por causa do modelo fat

30
00:01:20,130 --> 00:01:22,110
‫e da filosofia do controlador

31
00:01:22,110 --> 00:01:24,230
‫fino, que torna o modelo o

32
00:01:24,230 --> 00:01:26,770
‫lugar perfeito para realizar a validação, certo?

33
00:01:26,770 --> 00:01:29,540
‫E, de fato, o Mongoose já vem com

34
00:01:29,540 --> 00:01:32,230
‫várias ferramentas de validação prontas para usar.

35
00:01:32,230 --> 00:01:36,120
‫E então, vamos agora realmente fazer alguma validação de dados aqui.

36
00:01:36,120 --> 00:01:37,680
‫E, na verdade, já fizemos.

37
00:01:37,680 --> 00:01:41,850
‫Então, quando usamos esse require aqui, ele na verdade já

38
00:01:41,850 --> 00:01:45,290
‫é um validador de dados embutido, certo?

39
00:01:45,290 --> 00:01:48,368
‫Então você vê que usamos um validador como exigido

40
00:01:48,368 --> 00:01:50,970
‫aqui nas opções de tipo de esquema.

41
00:01:50,970 --> 00:01:54,340
‫E required está realmente disponível para todos os tipos de dados.

42
00:01:54,340 --> 00:01:56,870
‫Então, não apenas strings, mas realmente tudo.

43
00:01:56,870 --> 00:02:00,010
‫Números, booleanos, datas ou, realmente, qualquer tipo

44
00:02:00,010 --> 00:02:01,930
‫que você esteja usando.

45
00:02:01,930 --> 00:02:04,970
‫Então, também temos um único aqui, mas

46
00:02:04,970 --> 00:02:08,610
‫observe que, na verdade, ele não é um validador técnico.

47
00:02:08,610 --> 00:02:10,170
‫Ainda produzirá um erro

48
00:02:10,170 --> 00:02:12,080
‫quando tivermos um nome duplicado,

49
00:02:12,080 --> 00:02:15,167
‫mas, novamente, este não é realmente um validador, certo?

50
00:02:15,167 --> 00:02:17,790
‫Mas, obrigatório é um validador, e por

51
00:02:17,790 --> 00:02:20,403
‫isso vou mostrar agora outro que

52
00:02:20,403 --> 00:02:23,000
‫é específico apenas para strings,

53
00:02:23,000 --> 00:02:26,870
‫que é chamado de comprimento máximo e também comprimento mínimo.

54
00:02:26,870 --> 00:02:28,160
‫Portanto, temos o comprimento

55
00:02:30,320 --> 00:02:32,830
‫máximo e como o nome diz, usamos isso

56
00:02:32,830 --> 00:02:35,470
‫para especificar o comprimento máximo que uma string pode ter.

57
00:02:35,470 --> 00:02:37,490
‫E se for mais longo do

58
00:02:37,490 --> 00:02:39,800
‫que isso, então, vai produzir um erro, certo?

59
00:02:39,800 --> 00:02:42,936
‫Então, vamos fazer isso exatamente como fizemos antes

60
00:02:42,936 --> 00:02:47,170
‫com required, onde especificamos um array e, em seguida, definimos o valor.

61
00:02:47,170 --> 00:02:50,940
‫Então, digamos que queremos 40 como o comprimento máximo da string

62
00:02:50,940 --> 00:02:53,920
‫e, em seguida, adicionamos o erro depois disso.

63
00:02:53,920 --> 00:02:56,850
‫Então, basicamente, a mensagem de erro que recebemos.

64
00:02:56,850 --> 00:03:01,093
‫Portanto, o nome de um passeio deve ter

65
00:03:05,410 --> 00:03:08,693
‫menos ou igual a 40 caracteres.

66
00:03:10,880 --> 00:03:13,320
‫Ok, então, esse é o comprimento máximo

67
00:03:13,320 --> 00:03:15,673
‫e também temos o comprimento mínimo.

68
00:03:18,600 --> 00:03:22,480
‫Certo, vamos definir um para 10, então o

69
00:03:22,480 --> 00:03:27,480
‫nome do passeio deve ter mais ou igual a 10 caracteres.

70
00:03:29,010 --> 00:03:33,590
‫Ok, e assim, temos esses dois validadores que

71
00:03:33,590 --> 00:03:37,320
‫estão disponíveis apenas em strings, ok?

72
00:03:37,320 --> 00:03:40,690
‫E, então, vamos realmente tentar isso.

73
00:03:40,690 --> 00:03:42,690
‫Então, vou criar um novo tour aqui.

74
00:03:44,570 --> 00:03:46,453
‫E, este não é um passeio

75
00:03:48,050 --> 00:03:50,183
‫secreto, mas aqui o resto não importa.

76
00:03:53,550 --> 00:03:56,100
‫Vou chamar isso de Tour de Teste e

77
00:03:56,100 --> 00:03:58,160
‫vamos ver quantos personagens temos, então

78
00:03:58,160 --> 00:04:00,280
‫quatro mais um, mais quatro, então

79
00:04:00,280 --> 00:04:02,130
‫temos apenas nove personagens.

80
00:04:02,130 --> 00:04:05,223
‫E, portanto, agora devemos esperar realmente obter um erro.

81
00:04:06,490 --> 00:04:07,980
‫Então, vamos tentar isso.

82
00:04:07,980 --> 00:04:09,910
‫E, de fato, um nome de

83
00:04:09,910 --> 00:04:12,460
‫passeio deve ter mais ou igual a 10 caracteres.

84
00:04:12,460 --> 00:04:15,873
‫Ótimo, mas agora que tal atualizar os tours?

85
00:04:17,290 --> 00:04:19,860
‫Então, vamos pegar um desses aqui.

86
00:04:19,860 --> 00:04:23,910
‫Portanto, temos este tour de teste dois aqui,

87
00:04:23,910 --> 00:04:25,963
‫então vamos tentar atualizá-lo.

88
00:04:27,540 --> 00:04:30,173
‫Então, vamos para nossa rota de turnê atualizada.

89
00:04:33,690 --> 00:04:38,023
‫E agora vamos aqui, alterar o nome para Teste, enviar

90
00:04:39,890 --> 00:04:43,240
‫a solicitação e, obteremos o mesmo erro.

91
00:04:43,240 --> 00:04:45,540
‫Agora, isso só funciona por causa de

92
00:04:45,540 --> 00:04:47,400
‫uma configuração que definimos

93
00:04:47,400 --> 00:04:50,600
‫há muito tempo, quando implementamos este manipulador de atualização.

94
00:04:50,600 --> 00:04:53,853
‫Então, deixe-me mostrar isso rapidamente no controlador de turnê.

95
00:04:54,860 --> 00:04:57,846
‫Excluir e atualizar e, portanto, é por causa

96
00:04:57,846 --> 00:05:00,255
‫desta opção aqui runValidators, definida

97
00:05:00,255 --> 00:05:03,180
‫como true, que os validadores são executados novamente.

98
00:05:03,180 --> 00:05:04,959
‫Se eu

99
00:05:04,959 --> 00:05:09,750
‫definir agora como falso, Mongoose aceitará alegremente esse nome.

100
00:05:09,750 --> 00:05:12,673
‫E, de fato, é verdade.

101
00:05:14,880 --> 00:05:17,072
‫Então, vamos definir de volta para

102
00:05:17,072 --> 00:05:18,453
‫algo mais longo,

103
00:05:20,630 --> 00:05:24,073
‫não importa, ok, e se eu definir de volta

104
00:05:26,950 --> 00:05:29,070
‫para verdadeiro, então ele não

105
00:05:29,070 --> 00:05:33,140
‫deve aceitar e, de fato, receberemos nosso erro de volta, certo?

106
00:05:33,140 --> 00:05:34,540
‫Então, só queria

107
00:05:34,540 --> 00:05:36,763
‫mostrar rapidamente o fato dessa configuração.

108
00:05:38,820 --> 00:05:42,370
‫Tudo bem, então, sim, agora estão funcionando.

109
00:05:42,370 --> 00:05:46,030
‫Vamos tentar mais alguns validadores aqui.

110
00:05:46,030 --> 00:05:48,450
‫Por exemplo, agora em números.

111
00:05:48,450 --> 00:05:51,520
‫Então, vamos ver a média das avaliações.

112
00:05:51,520 --> 00:05:53,370
‫E sabemos que a

113
00:05:53,370 --> 00:05:57,330
‫avaliação deve estar sempre entre um e zero, e sabemos que

114
00:05:57,330 --> 00:06:00,880
‫uma avaliação deve estar sempre entre um e cinco, certo?

115
00:06:00,880 --> 00:06:03,680
‫E assim, muito semelhante ao comprimento mínimo e máximo,

116
00:06:03,680 --> 00:06:06,253
‫em números nós simplesmente temos mínimo e máximo.

117
00:06:08,350 --> 00:06:11,353
‫Portanto, o mínimo que queremos é um e, em

118
00:06:15,240 --> 00:06:17,253
‫seguida, novamente nossa mensagem de erro.

119
00:06:18,280 --> 00:06:23,280
‫Portanto, a classificação deve ser acima de 1. 0, digamos.

120
00:06:26,360 --> 00:06:29,643
‫E então o máximo é cinco.

121
00:06:34,040 --> 00:06:38,660
‫Deve estar abaixo de 5. 0, ok, e vamos testar

122
00:06:38,660 --> 00:06:40,873
‫rapidamente este também.

123
00:06:43,300 --> 00:06:48,300
‫Então, ao criar um novo tour, vamos chamá-lo de Test

124
00:06:49,390 --> 00:06:53,933
‫Tour Amazing porque tem uma classificação média de seis.

125
00:06:55,020 --> 00:06:57,680
‫Ok, então vamos ver o que acontece então,

126
00:06:57,680 --> 00:07:00,380
‫e de fato, a classificação deve estar abaixo de cinco.

127
00:07:00,380 --> 00:07:03,620
‫Certo, então, isso de novo não vai

128
00:07:03,620 --> 00:07:06,930
‫funcionar e, claro, também não pode ser zero.

129
00:07:06,930 --> 00:07:10,130
‫Então, deve estar acima de um e,

130
00:07:10,130 --> 00:07:14,650
‫claro, com quatro, vai funcionar e, de fato, aqui está nosso tour.

131
00:07:14,650 --> 00:07:18,180
‫Em seguida, quero restringir este valor de dificuldade aqui

132
00:07:18,180 --> 00:07:20,090
‫a apenas três dificuldades.

133
00:07:20,090 --> 00:07:22,480
‫Então, fácil, médio e difícil.

134
00:07:22,480 --> 00:07:24,660
‫E se o usuário colocar outra

135
00:07:24,660 --> 00:07:26,360
‫coisa, não vai funcionar.

136
00:07:26,360 --> 00:07:27,623
‫Então, vamos tentar isso.

137
00:07:32,660 --> 00:07:36,420
‫Então, o validador que usamos para isso é chamado de enum,

138
00:07:36,420 --> 00:07:38,850
‫ok, e então, aqui podemos passar

139
00:07:38,850 --> 00:07:41,403
‫uma matriz dos valores, basicamente, que são permitidos.

140
00:07:42,570 --> 00:07:47,570
‫Então, temos fácil, temos médio e temos dificuldade.

141
00:07:49,550 --> 00:07:53,380
‫Tudo bem, agora também queremos especificar nossa mensagem de erro aqui,

142
00:07:53,380 --> 00:07:56,870
‫mas no momento isso não é realmente possível, certo?

143
00:07:56,870 --> 00:07:59,490
‫Quer dizer, se adicionarmos outro argumento aqui,

144
00:07:59,490 --> 00:08:01,330
‫então não seria para

145
00:08:01,330 --> 00:08:05,540
‫a mensagem de erro, seria claro para outro valor possível, ok?

146
00:08:05,540 --> 00:08:08,200
‫E então, a solução que precisamos

147
00:08:08,200 --> 00:08:10,993
‫fazer aqui é criar mais um objeto aqui

148
00:08:11,900 --> 00:08:15,613
‫e, então, especificar de fato que estes aqui são os valores.

149
00:08:18,870 --> 00:08:23,560
‫E então, nossa mensagem, certo?

150
00:08:23,560 --> 00:08:26,230
‫E é assim que realmente funciona.

151
00:08:26,230 --> 00:08:29,040
‫Esta notação aqui é apenas

152
00:08:29,040 --> 00:08:32,763
‫uma abreviatura para este objeto completo aqui, certo?

153
00:08:34,760 --> 00:08:39,760
‫Portanto, a dificuldade é: fácil, média ou difícil.

154
00:08:45,280 --> 00:08:50,280
‫Ok, e então, este é um validador muito bom e muito útil que

155
00:08:50,323 --> 00:08:53,870
‫está automaticamente disponível em todas as strings, ok, então, não

156
00:08:53,870 --> 00:08:57,348
‫tente usar este aqui em números, por exemplo.

157
00:08:57,348 --> 00:08:59,870
‫Isso é apenas para strings.

158
00:08:59,870 --> 00:09:02,540
‫E, a propósito, este mínimo e

159
00:09:02,540 --> 00:09:04,450
‫máximo aqui não são

160
00:09:04,450 --> 00:09:07,820
‫apenas para números, mas também funcionará com datas, certo?

161
00:09:07,820 --> 00:09:12,820
‫De qualquer forma, vamos finalmente testar isso também.

162
00:09:13,180 --> 00:09:15,399
‫Então, precisamos mudar o nome, e

163
00:09:15,399 --> 00:09:17,249
‫aqui vamos colocar outra

164
00:09:20,460 --> 00:09:23,233
‫coisa, certo, e de fato, obtemos nosso erro.

165
00:09:24,770 --> 00:09:28,080
‫Se agora colocarmos fácil, então funciona.

166
00:09:28,080 --> 00:09:30,450
‫Ok, e isso é realmente tudo que eu

167
00:09:30,450 --> 00:09:31,780
‫queria mostrar a

168
00:09:31,780 --> 00:09:35,110
‫vocês aqui nesta palestra, mas na verdade existem vários outros validadores.

169
00:09:35,110 --> 00:09:38,259
‫Por exemplo, em strings, você tem um validador de

170
00:09:38,259 --> 00:09:40,370
‫correspondência para verificar se a

171
00:09:40,370 --> 00:09:43,090
‫entrada corresponde a uma determinada expressão regular.

172
00:09:43,090 --> 00:09:46,460
‫Mas, acredito que esses que acabei de mostrar aqui

173
00:09:46,460 --> 00:09:49,250
‫são os validadores integrados mais importantes.

174
00:09:49,250 --> 00:09:51,450
‫E, para uma lista completa de

175
00:09:51,450 --> 00:09:54,530
‫todos eles, é claro, você sempre pode verificar a documentação.

176
00:09:54,530 --> 00:09:57,590
‫Agora também podemos especificar nossos próprios validadores, e

177
00:09:57,590 --> 00:09:59,790
‫isso é exatamente o que faremos

178
00:09:59,790 --> 00:10:01,363
‫no próximo vídeo.

