﻿1
00:00:00,920 --> 00:00:02,913
‫-: Como mencionei no último

2
00:00:02,913 --> 00:00:05,243
‫vídeo, existem três tipos de erros

3
00:00:05,243 --> 00:00:07,525
‫que podem ser criados pelo Mongoose

4
00:00:07,525 --> 00:00:10,520
‫nos quais precisamos marcar como erros operacionais para

5
00:00:10,520 --> 00:00:13,700
‫que possamos enviar mensagens de erro significativas aos

6
00:00:13,700 --> 00:00:15,383
‫clientes em produção.

7
00:00:16,890 --> 00:00:21,290
‫E agora vamos começar simulando esses três erros, ok?

8
00:00:21,290 --> 00:00:25,263
‫Então, a primeira é quando tentamos um ID inválido aqui, simplesmente

9
00:00:26,240 --> 00:00:28,180
‫algo como isso, e

10
00:00:28,180 --> 00:00:30,950
‫o Mongoose não será capaz de converter isso

11
00:00:30,950 --> 00:00:33,427
‫em um ID do MongoDB, lembre-se disso.

12
00:00:33,427 --> 00:00:36,799
‫E esse é o erro que temos agora e, na

13
00:00:36,799 --> 00:00:39,650
‫verdade, aqui você pode ver todo o

14
00:00:39,650 --> 00:00:42,950
‫tipo de coisa que definimos que queríamos ver nas produções.

15
00:00:42,950 --> 00:00:47,010
‫Então, todo o objeto de erro, a mensagem de

16
00:00:47,010 --> 00:00:50,590
‫erro e também a pilha completa, certo?

17
00:00:50,590 --> 00:00:53,180
‫E, portanto, este é um exemplo perfeito de

18
00:00:53,180 --> 00:00:54,500
‫um erro operacional.

19
00:00:54,500 --> 00:00:57,160
‫Portanto, isso é algo que pode muito bem

20
00:00:57,160 --> 00:01:00,060
‫acontecer e, portanto, precisamos enviar de volta uma resposta

21
00:01:00,060 --> 00:01:02,380
‫significativa para lidar com esse erro.

22
00:01:02,380 --> 00:01:05,590
‫E este é um exemplo perfeito de um erro operacional que

23
00:01:05,590 --> 00:01:09,260
‫é muito provável que em algum momento aconteça com um cliente, então, precisamos

24
00:01:09,260 --> 00:01:11,740
‫lidar com isso como um só, certo?

25
00:01:11,740 --> 00:01:14,607
‫Então, basicamente enviando uma bela mensagem de

26
00:01:14,607 --> 00:01:16,690
‫erro ao invés de algo

27
00:01:16,690 --> 00:01:20,181
‫assim, que não significa nada para nenhum cliente, certo?

28
00:01:20,181 --> 00:01:22,500
‫Ok, então o objetivo aqui

29
00:01:22,500 --> 00:01:26,120
‫novamente será basicamente marcar esse erro como operacional

30
00:01:26,120 --> 00:01:28,880
‫e criar uma mensagem significativa, certo?

31
00:01:28,880 --> 00:01:30,580
‫Mas antes de fazermos isso,

32
00:01:30,580 --> 00:01:32,620
‫vamos dar uma olhada nos outros

33
00:01:32,620 --> 00:01:36,260
‫dois erros do Mongoose que também teremos que marcar como operacionais, certo?

34
00:01:36,260 --> 00:01:38,457
‫Então, vamos criar um

35
00:01:38,457 --> 00:01:43,236
‫novo passeio, e o que farei é criar um nome duplicado.

36
00:01:43,236 --> 00:01:46,210
‫Então, vamos apenas copiar este aqui.

37
00:01:50,347 --> 00:01:52,503
‫E acho que todos os valores

38
00:01:52,503 --> 00:01:54,780
‫aqui estão corretos, então vamos tentar isso agora.

39
00:01:54,780 --> 00:01:58,520
‫E de fato, aqui temos o erro que já conhecemos, que

40
00:01:58,520 --> 00:02:00,210
‫é um erro de

41
00:02:00,210 --> 00:02:01,960
‫chave duplicada porque já temos

42
00:02:01,960 --> 00:02:05,740
‫um tour, ou um documento com o nome de Forest Hiker, ok?

43
00:02:05,740 --> 00:02:07,440
‫Então, novamente, este é um

44
00:02:07,440 --> 00:02:09,420
‫erro que vai acontecer em algum

45
00:02:09,420 --> 00:02:10,720
‫momento e, novamente,

46
00:02:10,720 --> 00:02:13,650
‫não há uma mensagem de erro muito significativa, certo?

47
00:02:13,650 --> 00:02:16,243
‫E então, novamente, precisamos mudar isso.

48
00:02:17,200 --> 00:02:19,954
‫O terceiro também é sobre validação,

49
00:02:19,954 --> 00:02:23,980
‫então vamos fazer isso aqui no Tour de atualização.

50
00:02:23,980 --> 00:02:27,835
‫Então, digamos que queremos uma média de avaliações de seis,

51
00:02:27,835 --> 00:02:30,700
‫que sabemos que é inválida, certo?

52
00:02:30,700 --> 00:02:33,430
‫Porque dissemos que o máximo de ratingsA Average

53
00:02:33,430 --> 00:02:34,960
‫pode ser cinco.

54
00:02:34,960 --> 00:02:36,720
‫Então, vamos

55
00:02:36,720 --> 00:02:40,891
‫ver, e de fato, temos esse ValidationError, certo?

56
00:02:40,891 --> 00:02:43,300
‫Então é chamado de ValidationError,

57
00:02:43,300 --> 00:02:47,600
‫e tem esse objeto de erros com todos os erros.

58
00:02:47,600 --> 00:02:49,400
‫Vamos colocar outro aqui.

59
00:02:51,377 --> 00:02:53,183
‫Digamos dificuldade e,

60
00:02:55,229 --> 00:02:57,110
‫em seguida, algo mais,

61
00:02:57,110 --> 00:02:59,981
‫que não seja fácil, médio ou

62
00:02:59,981 --> 00:03:03,540
‫difícil, e agora temos esses dois objetos aqui.

63
00:03:03,540 --> 00:03:08,090
‫Um para as classificações e outro para a dificuldade, certo?

64
00:03:08,090 --> 00:03:09,800
‫Esses são os

65
00:03:09,800 --> 00:03:11,740
‫três erros que vamos

66
00:03:11,740 --> 00:03:14,110
‫marcar como operacionais, começando com

67
00:03:14,110 --> 00:03:17,540
‫o primeiro, basicamente, o tipo CastError, certo?

68
00:03:17,540 --> 00:03:20,250
‫Então, vamos voltar aqui, e vamos fazer

69
00:03:20,250 --> 00:03:24,260
‫isso aqui, de novo, porque só queremos fazer isso na produção, ok?

70
00:03:24,260 --> 00:03:26,570
‫No desenvolvimento, não nos importamos com nada disso.

71
00:03:26,570 --> 00:03:28,576
‫Tudo o que queremos fazer

72
00:03:28,576 --> 00:03:30,910
‫é ver nossos erros para que possamos basicamente

73
00:03:30,910 --> 00:03:33,220
‫corrigi-los, mas na produção, é aqui que

74
00:03:33,220 --> 00:03:36,110
‫queremos enviar as mensagens de erro significativas aos clientes.

75
00:03:36,110 --> 00:03:40,690
‫Então, vamos dizer se errar. name é igual

76
00:03:40,690 --> 00:03:45,690
‫a CastError, então é assim que vamos identificar esse

77
00:03:45,980 --> 00:03:48,400
‫tipo de erro aqui

78
00:03:48,400 --> 00:03:51,000
‫que acabamos de falar,

79
00:03:51,000 --> 00:03:55,300
‫pois tem o nome de CastError, certo?

80
00:03:55,300 --> 00:03:57,564
‫Então, se errar. O nome

81
00:03:57,564 --> 00:04:02,230
‫é CastError, bem, então vamos chamar uma função especial que criaremos

82
00:04:02,230 --> 00:04:03,880
‫em um segundo,

83
00:04:03,880 --> 00:04:06,097
‫que é chamada de handleCastError.

84
00:04:10,750 --> 00:04:14,290
‫E então também direi aqui DB para banco de dados,

85
00:04:14,290 --> 00:04:18,320
‫para que saibamos que isso está relacionado ao nosso banco de dados, ok?

86
00:04:18,320 --> 00:04:19,920
‫E é assim que vai funcionar.

87
00:04:19,920 --> 00:04:21,470
‫Vamos passar o

88
00:04:21,470 --> 00:04:23,683
‫erro que o Mongoose criou

89
00:04:24,720 --> 00:04:27,070
‫nesta função, assim, e isso irá

90
00:04:27,070 --> 00:04:30,840
‫retornar um novo erro criado sem a classe AppError, ok?

91
00:04:30,840 --> 00:04:33,930
‫E esse erro será marcado como operacional, porque

92
00:04:33,930 --> 00:04:36,120
‫lembre-se, todos os nossos AppErrors

93
00:04:36,120 --> 00:04:38,030
‫têm as propriedades

94
00:04:38,030 --> 00:04:40,523
‫operacionais definidas para dois automaticamente, certo?

95
00:04:41,820 --> 00:04:46,390
‫Portanto, isso retornará um erro e, então, vamos salvar isso, ok?

96
00:04:46,390 --> 00:04:49,260
‫E assim estávamos salvando isso em err.

97
00:04:49,260 --> 00:04:51,050
‫Agora não é uma

98
00:04:51,050 --> 00:04:54,700
‫boa prática substituir os argumentos de uma função, certo?

99
00:04:54,700 --> 00:04:57,930
‫Portanto, o erro vem dessa função de erro do meio, certo?

100
00:04:57,930 --> 00:05:01,020
‫Então, a partir daqui, e em vez de

101
00:05:01,020 --> 00:05:03,217
‫fazer isso, vou criar

102
00:05:03,217 --> 00:05:06,516
‫uma cópia impressa desse objeto de erro, ok?

103
00:05:06,516 --> 00:05:09,760
‫Então let, e estou usando let, e não const, porque

104
00:05:09,760 --> 00:05:11,700
‫é claro que iremos

105
00:05:11,700 --> 00:05:14,043
‫reatribuir um novo erro mais tarde aqui.

106
00:05:15,490 --> 00:05:18,820
‫Portanto, vamos chamar esse erro em vez de apenas

107
00:05:18,820 --> 00:05:22,250
‫errar, que é o nome normal dos erros no Express.

108
00:05:22,250 --> 00:05:24,710
‫E então, novamente, vamos usar

109
00:05:24,710 --> 00:05:29,133
‫nosso truque onde usamos a desestruturação do erro original, certo?

110
00:05:30,930 --> 00:05:34,257
‫E assim, a partir de agora, usaremos este erro ao invés de errar.

111
00:05:35,620 --> 00:05:38,963
‫Então, aqui, aqui e aqui.

112
00:05:41,720 --> 00:05:42,770
‫Tudo bem?

113
00:05:42,770 --> 00:05:44,890
‫E então, vamos prosseguir

114
00:05:44,890 --> 00:05:47,223
‫e criar essa função aqui.

115
00:05:49,580 --> 00:05:52,883
‫Então, vamos colocar isso aqui no começo.

116
00:05:56,247 --> 00:05:57,413
‫Tudo bem.

117
00:05:58,270 --> 00:06:00,680
‫Tente se lembrar que isso recebe

118
00:06:00,680 --> 00:06:04,210
‫um erro, e agora vou voltar a chamá-lo de err

119
00:06:04,210 --> 00:06:07,320
‫assim, porque, novamente, esse é o padrão no Express.

120
00:06:07,320 --> 00:06:09,020
‫E para começar, vamos

121
00:06:09,020 --> 00:06:12,910
‫dar uma olhada novamente no objeto de erro aqui, ok?

122
00:06:12,910 --> 00:06:17,910
‫Então aqui temos o caminho e também o valor, ok?

123
00:06:18,290 --> 00:06:21,280
‫Portanto, o caminho aqui é basicamente o nome do

124
00:06:21,280 --> 00:06:25,000
‫campo para o qual os dados de entrada estão no formato errado, certo?

125
00:06:25,000 --> 00:06:27,860
‫E esse valor aqui é esse, que é,

126
00:06:27,860 --> 00:06:31,050
‫claro, o que a gente fez no passado, certo?

127
00:06:31,050 --> 00:06:34,200
‫Então, isso pode acontecer não só para o ID,

128
00:06:34,200 --> 00:06:36,450
‫mas realmente, para qualquer campo que

129
00:06:36,450 --> 00:06:39,370
‫consultarmos com um valor no formato errado, certo?

130
00:06:39,370 --> 00:06:41,270
‫E então, vamos agora

131
00:06:41,270 --> 00:06:43,330
‫basicamente criar uma string que

132
00:06:43,330 --> 00:06:48,330
‫diz que temos um ID inválido com o valor deste neste caso, certo?

133
00:06:48,360 --> 00:06:53,360
‫Então, é caminho e valor, certo?

134
00:06:53,530 --> 00:06:55,873
‫Então, vamos criar uma mensagem aqui e dizer

135
00:06:59,780 --> 00:07:01,770
‫Erro inválido. caminho é

136
00:07:08,328 --> 00:07:09,411
‫errar. valor.

137
00:07:13,870 --> 00:07:15,250
‫OK?

138
00:07:15,250 --> 00:07:17,813
‫E agora, simplesmente retornamos nosso próprio AppError.

139
00:07:18,990 --> 00:07:20,227
‫OK?

140
00:07:20,227 --> 00:07:24,270
‫Assim como mencionei algumas vezes até agora, ok?

141
00:07:24,270 --> 00:07:27,740
‫Então AppError, e eu realmente tenho que incluí-lo aqui,

142
00:07:27,740 --> 00:07:30,933
‫ou exigir, porque eu não fiz isso ainda.

143
00:07:31,940 --> 00:07:35,633
‫Portanto, const AppError é igual a require e mova

144
00:07:39,150 --> 00:07:42,620
‫um nível para cima, depois para a pasta de

145
00:07:42,620 --> 00:07:45,213
‫utilitários e, em seguida, appError.

146
00:07:46,350 --> 00:07:47,183
‫Aqui está.

147
00:07:48,150 --> 00:07:52,570
‫E agora, em ou AppError, passamos nossa mensagem e o

148
00:07:52,570 --> 00:07:56,860
‫código de status 400, que significa Bad Request.

149
00:07:56,860 --> 00:07:59,040
‫Ok, e assim, transformamos o

150
00:07:59,040 --> 00:08:00,940
‫erro estranho que recebíamos

151
00:08:00,940 --> 00:08:02,640
‫do Mongoose em um

152
00:08:02,640 --> 00:08:04,110
‫erro operacional com

153
00:08:04,110 --> 00:08:06,354
‫uma mensagem amigável que (risos)

154
00:08:06,354 --> 00:08:07,187
‫um

155
00:08:07,187 --> 00:08:09,343
‫humano real pode ler, certo?

156
00:08:10,684 --> 00:08:13,270
‫Ok, uma última coisa que

157
00:08:13,270 --> 00:08:18,150
‫precisamos mudar aqui é definir este aqui também como erro, ok?

158
00:08:18,150 --> 00:08:21,750
‫E então, agora, se nosso erro for

159
00:08:21,750 --> 00:08:24,770
‫CastError, bem, passaremos o erro para

160
00:08:24,770 --> 00:08:27,790
‫esta função que retornará nosso AppError,

161
00:08:27,790 --> 00:08:31,430
‫então este e aquele que será enviado ao

162
00:08:31,430 --> 00:08:34,180
‫cliente usando nosso sendErrorProd, OK?

163
00:08:34,180 --> 00:08:36,123
‫E então, vamos tentar isso agora.

164
00:08:37,080 --> 00:08:39,060
‫Então aqui, em nosso pacote. json,

165
00:08:39,060 --> 00:08:43,627
‫temos este script start: prod, então vamos tentar isso.

166
00:08:43,627 --> 00:08:48,627
‫Então, npm execute start: prod, e eu posso realmente completar automaticamente esses

167
00:08:50,250 --> 00:08:54,580
‫nomes de script npm usando tab aqui no terminal, ok?

168
00:08:54,580 --> 00:08:56,420
‫E então, isso vai

169
00:08:56,420 --> 00:08:59,640
‫iniciar um processo em modo de produção, basicamente, ok?

170
00:08:59,640 --> 00:09:01,060
‫E então, vamos tentar novamente.

171
00:09:01,060 --> 00:09:02,580
‫Portanto, se você está fazendo

172
00:09:02,580 --> 00:09:04,350
‫essa solicitação agora, devemos receber de volta

173
00:09:04,350 --> 00:09:07,500
‫a mensagem de erro que acabamos de criar, porque agora estamos em produção.

174
00:09:07,500 --> 00:09:10,060
‫E, de fato, aqui está.

175
00:09:10,060 --> 00:09:12,530
‫Portanto, temos inválido e, em seguida, o nome do

176
00:09:12,530 --> 00:09:15,010
‫campo, ou na verdade o nome do caminho, e o

177
00:09:15,010 --> 00:09:15,843
‫valor que inserimos.

178
00:09:17,130 --> 00:09:19,194
‫Portanto, se tentarmos algo

179
00:09:19,194 --> 00:09:21,730
‫diferente, é claro que obteremos

180
00:09:21,730 --> 00:09:25,450
‫isso e, claro, também nosso código 400 Bad Request.

181
00:09:25,450 --> 00:09:26,650
‫Certo, ótimo.

182
00:09:26,650 --> 00:09:28,533
‫Então, este agora está resolvido.

183
00:09:28,533 --> 00:09:32,210
‫Na próxima aula, cuidaremos da próxima, que é

184
00:09:32,210 --> 00:09:35,440
‫para nomes de campos duplicados, certo?

185
00:09:35,440 --> 00:09:36,890
‫Então, nos vemos em um segundo.

