﻿1
00:00:01,010 --> 00:00:02,650
‫Instrutor Masculino: Finalmente, vamos agora

2
00:00:02,650 --> 00:00:05,053
‫lidar com os erros de validação do Mongoose.

3
00:00:06,630 --> 00:00:09,750
‫Então, lembra como tentamos atualizar um tour com alguns

4
00:00:09,750 --> 00:00:11,410
‫dados inválidos aqui, e

5
00:00:11,410 --> 00:00:13,890
‫então obtivemos esse tipo de erro?

6
00:00:13,890 --> 00:00:15,160
‫OK.

7
00:00:15,160 --> 00:00:17,923
‫E vamos tentar adicionar outro.

8
00:00:19,890 --> 00:00:24,350
‫Então, um nome muito curto, ok?

9
00:00:24,350 --> 00:00:27,410
‫E porque isso não é permitido, de novo.

10
00:00:27,410 --> 00:00:30,680
‫Ah, e agora não podemos mais ver nosso erro

11
00:00:30,680 --> 00:00:33,000
‫porque agora estamos em produção.

12
00:00:33,000 --> 00:00:34,750
‫E é claro que esse erro

13
00:00:34,750 --> 00:00:36,370
‫agora não foi tratado corretamente.

14
00:00:36,370 --> 00:00:38,730
‫Não está marcado como operacional.

15
00:00:38,730 --> 00:00:39,580
‫Portanto, lembre-se

16
00:00:39,580 --> 00:00:44,020
‫de que recebemos esse tipo de mensagem de erro genérica de volta.

17
00:00:44,020 --> 00:00:45,040
‫OK?

18
00:00:45,040 --> 00:00:49,530
‫Portanto, apenas para ver o erro que tivemos antes,

19
00:00:49,530 --> 00:00:52,263
‫vamos voltar rapidamente ao desenvolvimento.

20
00:00:53,810 --> 00:00:55,253
‫Então npm start.

21
00:00:58,950 --> 00:01:00,610
‫E, envie-o agora

22
00:01:00,610 --> 00:01:01,810
‫novamente.

23
00:01:01,810 --> 00:01:05,220
‫E agora recuperamos nossos erros de desenvolvimento, certo?

24
00:01:05,220 --> 00:01:06,590
‫Porque agora eu

25
00:01:06,590 --> 00:01:10,410
‫quero mostrar como podemos realmente criar uma mensagem de erro significativa

26
00:01:10,410 --> 00:01:13,590
‫com base em tudo isso, o que temos aqui.

27
00:01:13,590 --> 00:01:14,670
‫Agora está certo.

28
00:01:14,670 --> 00:01:16,690
‫Portanto, dentro do nosso

29
00:01:16,690 --> 00:01:19,280
‫erro, obtemos as propriedades do erro.

30
00:01:19,280 --> 00:01:21,800
‫E essa propriedade em si é

31
00:01:21,800 --> 00:01:24,540
‫um objeto que contém muitos objetos, e

32
00:01:24,540 --> 00:01:28,770
‫cada um deles é para um dos campos que contém um erro.

33
00:01:28,770 --> 00:01:29,790
‫Tudo bem?

34
00:01:29,790 --> 00:01:33,760
‫Portanto, o primeiro aqui é para a duração do passeio.

35
00:01:33,760 --> 00:01:35,760
‫Então o segundo é para a dificuldade,

36
00:01:35,760 --> 00:01:37,310
‫isso também está errado.

37
00:01:37,310 --> 00:01:40,400
‫E o terceiro é para a avaliação, ok?

38
00:01:40,400 --> 00:01:44,520
‫Então, cada um deles tem, na verdade, uma boa mensagem de erro, certo?

39
00:01:44,520 --> 00:01:48,210
‫Então, basicamente aquele que definimos em nosso esquema Mongoose.

40
00:01:48,210 --> 00:01:50,480
‫E agora queremos extrair essas

41
00:01:50,480 --> 00:01:52,490
‫três mensagens daqui

42
00:01:52,490 --> 00:01:55,920
‫e colocá-las todas em uma única string, certo?

43
00:01:55,920 --> 00:01:58,593
‫Então, vamos fazer isso.

44
00:01:59,720 --> 00:02:00,553
‫OK.

45
00:02:00,553 --> 00:02:01,740
‫E,

46
00:02:01,740 --> 00:02:05,363
‫novamente, vou começar criando a condicional aqui.

47
00:02:06,720 --> 00:02:07,553
‫Então if (erro),

48
00:02:09,210 --> 00:02:10,760
‫e realmente vamos dar uma olhada.

49
00:02:12,270 --> 00:02:14,290
‫Então aqui está o erro.

50
00:02:14,290 --> 00:02:16,413
‫Temos os erros, todos eles.

51
00:02:17,510 --> 00:02:19,840
‫E eu preciso rolar aqui.

52
00:02:19,840 --> 00:02:22,320
‫E sim, então aqui está o nome.

53
00:02:22,320 --> 00:02:26,300
‫Então, erro. nome é ValidationError, certo?

54
00:02:26,300 --> 00:02:27,453
‫Então, vamos pegar isso.

55
00:02:32,150 --> 00:02:32,983
‫OK.

56
00:02:32,983 --> 00:02:36,010
‫E então, novamente, é um erro criado por Mongoose.

57
00:02:36,010 --> 00:02:37,440
‫Assim como o

58
00:02:37,440 --> 00:02:40,023
‫primeiro, e eles parecem semelhantes, ok.

59
00:02:41,150 --> 00:02:42,553
‫Agora eu não quero isso aqui.

60
00:02:43,400 --> 00:02:45,410
‫Mas ao invés disso

61
00:02:45,410 --> 00:02:48,863
‫eu quero que o erro seja igual a

62
00:02:54,290 --> 00:02:57,123
‫handleValidationErrorDB, e mande o erro, ok?

63
00:02:59,400 --> 00:03:00,933
‫Agora vamos copiar novamente.

64
00:03:08,560 --> 00:03:09,840
‫Tudo bem.

65
00:03:09,840 --> 00:03:13,723
‫E vamos novamente, simplesmente comece criando nossa mensagem.

66
00:03:19,090 --> 00:03:20,523
‫Dados de entrada inválidos.

67
00:03:23,060 --> 00:03:25,043
‫E então vamos retornar o erro.

68
00:03:27,520 --> 00:03:29,020
‫Portanto, novo AppError (mensagem, 400).

69
00:03:30,275 --> 00:03:31,860
‫Então o VS Code

70
00:03:31,860 --> 00:03:35,073
‫já reconheceu que eu queria digitar exatamente isso, certo?

71
00:03:38,130 --> 00:03:40,280
‫Agora, para criar uma grande

72
00:03:40,280 --> 00:03:43,400
‫string de todas as strings de todos os erros,

73
00:03:43,400 --> 00:03:46,330
‫basicamente temos que fazer um loop sobre todos esses

74
00:03:46,330 --> 00:03:51,180
‫objetos e, em seguida, extrair todas as mensagens de erro em um novo array.

75
00:03:51,180 --> 00:03:53,573
‫Então, vamos novamente, dar uma olhada nisso.

76
00:03:54,440 --> 00:03:55,320
‫OK.

77
00:03:55,320 --> 00:03:58,430
‫Portanto, o objeto que contém todos

78
00:03:58,430 --> 00:04:01,290
‫os objetos contém erros, certo?

79
00:04:01,290 --> 00:04:03,800
‫Portanto, temos um erro para o nome, um para

80
00:04:03,800 --> 00:04:05,870
‫a dificuldade e um para as avaliaçõesMédia.

81
00:04:05,870 --> 00:04:09,923
‫E então vamos basicamente fazer um loop sobre esse objeto de erros.

82
00:04:10,810 --> 00:04:11,660
‫OK?

83
00:04:11,660 --> 00:04:14,190
‫E em JavaScript, usamos Object. valores para

84
00:04:14,190 --> 00:04:17,290
‫basicamente fazer um loop sobre um objeto.

85
00:04:17,290 --> 00:04:19,720
‫Portanto, os elementos de um objeto.

86
00:04:19,720 --> 00:04:21,260
‫Tudo bem?

87
00:04:21,260 --> 00:04:25,000
‫Portanto, vamos criar uma variável aqui chamada erros, que novamente

88
00:04:25,000 --> 00:04:26,700
‫será um array de todas

89
00:04:26,700 --> 00:04:28,583
‫as mensagens de erro por enquanto,

90
00:04:29,640 --> 00:04:32,963
‫e agora Object. valores.

91
00:04:34,930 --> 00:04:38,863
‫E então queremos os valores de errar. erros, certo?

92
00:04:41,540 --> 00:04:44,580
‫E agora faça um loop sobre eles usando um mapa.

93
00:04:44,580 --> 00:04:46,160
‫E então, em

94
00:04:46,160 --> 00:04:50,220
‫cada iteração, vamos simplesmente retornar a mensagem de erro, ok?

95
00:04:50,220 --> 00:04:54,540
‫Então, apenas para ter certeza de que estamos todos na

96
00:04:54,540 --> 00:04:59,470
‫mesma página aqui, o Objeto. valores são esses objetos, ok?

97
00:04:59,470 --> 00:05:04,190
‫Então, esse objeto, e esse objeto, e o próximo, certo?

98
00:05:04,190 --> 00:05:05,730
‫Então, esses são os valores.

99
00:05:05,730 --> 00:05:06,930
‫E agora tudo

100
00:05:06,930 --> 00:05:09,110
‫o que temos que fazer para extrair

101
00:05:09,110 --> 00:05:12,210
‫a mensagem é dizer valor. mensagem, ok?

102
00:05:12,210 --> 00:05:13,533
‫Assim . mensagem.

103
00:05:16,410 --> 00:05:18,380
‫Então, basicamente o valor atual, ou digamos

104
00:05:18,380 --> 00:05:19,710
‫o elemento atual,

105
00:05:19,710 --> 00:05:21,653
‫gosto de usar o elemento para

106
00:05:22,640 --> 00:05:25,423
‫isso e queremos retornar el. mensagem.

107
00:05:26,870 --> 00:05:27,703
‫OK.

108
00:05:28,940 --> 00:05:32,040
‫E agora, é claro, isso não deveria estar aqui.

109
00:05:32,040 --> 00:05:34,140
‫E provavelmente você já percebeu isso.

110
00:05:35,260 --> 00:05:39,930
‫Então, na verdade, é aqui que queremos isso, certo?

111
00:05:39,930 --> 00:05:41,280
‫E agora tudo o

112
00:05:41,280 --> 00:05:45,163
‫que precisamos fazer é inserir isso em nossa sequência de mensagens, certo?

113
00:05:46,830 --> 00:05:51,700
‫Erros, e agora simplesmente juntamos todos eles

114
00:05:51,700 --> 00:05:56,700
‫em uma string usando ponto e espaço, certo?

115
00:05:56,930 --> 00:05:59,263
‫E você verá, em um segundo, por que isso acontece.

116
00:06:00,350 --> 00:06:01,183
‫Tudo bem.

117
00:06:02,590 --> 00:06:05,130
‫Portanto, vamos voltar à produção aqui.

118
00:06:05,130 --> 00:06:07,483
‫Executando nosso script de início de produção.

119
00:06:08,960 --> 00:06:12,083
‫Tente novamente agora e vamos esperar e

120
00:06:13,440 --> 00:06:14,310
‫bam!

121
00:06:14,310 --> 00:06:15,470
‫Aqui vamos nós!

122
00:06:15,470 --> 00:06:17,530
‫Portanto, dados de entrada inválidos.

123
00:06:17,530 --> 00:06:19,990
‫Então, a primeira string de erro deve ter

124
00:06:19,990 --> 00:06:22,150
‫mais ou igual a 10 caracteres.

125
00:06:22,150 --> 00:06:23,810
‫Depois o

126
00:06:23,810 --> 00:06:26,040
‫segundo e o terceiro.

127
00:06:26,040 --> 00:06:26,900
‫Perfeito.

128
00:06:26,900 --> 00:06:30,210
‫E foi por isso que usei o período e o espaço, certo?

129
00:06:30,210 --> 00:06:33,680
‫Então, basicamente separar essas três strings com um

130
00:06:33,680 --> 00:06:36,210
‫ponto e um espaço, certo?

131
00:06:36,210 --> 00:06:38,680
‫E agora isso parece uma mensagem de

132
00:06:38,680 --> 00:06:41,693
‫erro muito bem formatada que todos podem entender facilmente.

133
00:06:42,870 --> 00:06:43,703
‫Direito?

134
00:06:43,703 --> 00:06:46,180
‫Então, basicamente terminamos aqui.

135
00:06:46,180 --> 00:06:47,013
‫Tudo bem.

136
00:06:47,013 --> 00:06:49,890
‫Agora poderíamos ter cometido esse erro, tratando do

137
00:06:49,890 --> 00:06:52,120
‫erro, muito mais completo ainda.

138
00:06:52,120 --> 00:06:56,640
‫Por exemplo, poderíamos definir diferentes níveis de gravidade do erro, como dizer,

139
00:06:56,640 --> 00:06:59,130
‫este erro não é tão importante, este

140
00:06:59,130 --> 00:07:01,130
‫erro é médio importante

141
00:07:01,130 --> 00:07:04,770
‫e este erro é muito importante ou mesmo crítico.

142
00:07:04,770 --> 00:07:08,400
‫E também poderíamos enviar um e-mail para algum

143
00:07:08,400 --> 00:07:10,430
‫administrador sobre erros críticos.

144
00:07:10,430 --> 00:07:14,120
‫E realmente, há muitas coisas que podemos implementar.

145
00:07:14,120 --> 00:07:18,300
‫Mas de novo, em um tipo de aplicação pequena como essa,

146
00:07:18,300 --> 00:07:21,810
‫o que temos aqui já é muito bom, ok?

147
00:07:21,810 --> 00:07:24,410
‫Portanto, esta é uma estratégia bastante robusta

148
00:07:24,410 --> 00:07:25,970
‫que já implementamos

149
00:07:25,970 --> 00:07:29,150
‫aqui, e estou muito feliz com ela, ok?

150
00:07:29,150 --> 00:07:32,520
‫Então toda essa lógica aqui com os erros operacionais

151
00:07:32,520 --> 00:07:34,200
‫que implementamos aqui,

152
00:07:34,200 --> 00:07:36,393
‫então isso já é bastante sofisticado.

153
00:07:37,250 --> 00:07:38,083
‫OK?

154
00:07:39,290 --> 00:07:42,190
‫Agora, se algum dia encontrarmos outro erro que

155
00:07:42,190 --> 00:07:44,420
‫queremos marcar como operacional, é claro

156
00:07:44,420 --> 00:07:46,410
‫que tudo o que teremos

157
00:07:46,410 --> 00:07:50,120
‫que fazer é algo semelhante ao que temos aqui, certo?

158
00:07:50,120 --> 00:07:53,750
‫Então, basicamente, implemente outra função para aquela e retorne

159
00:07:53,750 --> 00:07:56,630
‫nosso próprio erro operacional para que a

160
00:07:56,630 --> 00:07:58,620
‫produção do erro de envio

161
00:07:58,620 --> 00:08:01,580
‫possa realmente enviar esse erro operacional para

162
00:08:01,580 --> 00:08:03,473
‫o cliente, certo?

163
00:08:04,320 --> 00:08:06,580
‫Ok, e com isso dito,

164
00:08:06,580 --> 00:08:09,080
‫nosso controlador de erro está realmente concluído.

165
00:08:09,080 --> 00:08:12,010
‫Mas ainda existem alguns outros erros que

166
00:08:12,010 --> 00:08:16,090
‫precisamos lidar que estão completamente fora do Mongo ou mesmo do Express.

167
00:08:16,090 --> 00:08:19,123
‫E faremos isso no restante desta seção.

