﻿1
00:00:01,150 --> 00:00:03,310
‫Homem: Neste vídeo, vamos implementar o

2
00:00:03,310 --> 00:00:06,080
‫middleware de tratamento de erros global sobre o

3
00:00:06,080 --> 00:00:07,483
‫qual falamos antes.

4
00:00:09,020 --> 00:00:11,280
‫Portanto, lembre-se de que o

5
00:00:11,280 --> 00:00:13,650
‫objetivo é escrever uma função de

6
00:00:13,650 --> 00:00:17,690
‫middleware, que será capaz de lidar com erros operacionais como este.

7
00:00:17,690 --> 00:00:22,010
‫Ok, então quando um usuário acessa uma URL que não existe,

8
00:00:22,010 --> 00:00:24,890
‫podemos considerar isso um erro operacional, e

9
00:00:24,890 --> 00:00:27,590
‫neste caso tratamos disso enviando de volta

10
00:00:27,590 --> 00:00:29,630
‫essa resposta aqui, certo?

11
00:00:29,630 --> 00:00:33,320
‫Mas, novamente, o objetivo é fazer isso em um local central.

12
00:00:33,320 --> 00:00:37,200
‫Por exemplo, temos coisas semelhantes aqui.

13
00:00:37,200 --> 00:00:39,870
‫Então, em todo lugar aqui temos esses trechos

14
00:00:39,870 --> 00:00:41,950
‫aqui, que tratam dos erros.

15
00:00:41,950 --> 00:00:45,270
‫Portanto, temos que golpear o bloco etch aqui, e se

16
00:00:45,270 --> 00:00:47,460
‫houver um erro, bem, então lidamos

17
00:00:47,460 --> 00:00:50,083
‫com isso enviando esse erro para o cliente.

18
00:00:51,290 --> 00:00:53,520
‫E, novamente, no final, queremos nos livrar

19
00:00:53,520 --> 00:00:56,170
‫de tudo isso e lidar com o erro

20
00:00:56,170 --> 00:00:57,900
‫em um middleware central.

21
00:00:57,900 --> 00:01:00,556
‫E então vamos começar criando

22
00:01:00,556 --> 00:01:02,800
‫essa função de middleware.

23
00:01:02,800 --> 00:01:05,470
‫E no Express, é realmente muito fácil.

24
00:01:05,470 --> 00:01:07,580
‫Lembre-se de como eu disse a você que

25
00:01:07,580 --> 00:01:09,540
‫o Express já vem com manipuladores de

26
00:01:09,540 --> 00:01:10,880
‫middleware prontos para uso.

27
00:01:10,880 --> 00:01:15,720
‫Como sempre, começamos usando o app. use, ok, e então

28
00:01:15,720 --> 00:01:19,210
‫aqui definimos nossa função de middleware.

29
00:01:19,210 --> 00:01:21,880
‫Portanto, para definir um middleware de tratamento

30
00:01:21,880 --> 00:01:24,870
‫de erros, tudo o que precisamos fazer é fornecer

31
00:01:24,870 --> 00:01:27,980
‫à função de middleware quatro argumentos e o Express irá

32
00:01:27,980 --> 00:01:30,740
‫reconhecê-lo automaticamente como um middleware de tratamento de erros.

33
00:01:30,740 --> 00:01:33,653
‫E, portanto, só chame quando houver um erro.

34
00:01:34,556 --> 00:01:38,220
‫E assim, como em muitos outros casos, essa função de

35
00:01:38,220 --> 00:01:41,740
‫middleware é uma função de erro primeiro, o que

36
00:01:41,740 --> 00:01:43,330
‫significa que o primeiro

37
00:01:43,330 --> 00:01:44,483
‫argumento é

38
00:01:45,930 --> 00:01:50,563
‫o erro e, em seguida, temos a solicitação, a resposta e o próximo.

39
00:01:51,975 --> 00:01:55,280
‫Portanto, ao especificar quatro parâmetros, o Express sabe automaticamente

40
00:01:55,280 --> 00:01:57,750
‫que toda a função aqui é um

41
00:01:57,750 --> 00:02:00,150
‫middleware de tratamento de erros.

42
00:02:00,150 --> 00:02:04,150
‫Portanto, agora vamos implementar o código para essa função aqui e, depois

43
00:02:04,150 --> 00:02:06,400
‫disso, mostrarei como podemos realmente criar um

44
00:02:06,400 --> 00:02:09,000
‫erro para que essa função de middleware seja

45
00:02:09,000 --> 00:02:09,930
‫realmente capturada.

46
00:02:09,930 --> 00:02:13,450
‫Portanto, em duas etapas, primeiro criamos o middleware e, em

47
00:02:13,450 --> 00:02:15,130
‫seguida, na segunda etapa,

48
00:02:15,130 --> 00:02:18,700
‫criaremos realmente um erro para que essa função seja detectada.

49
00:02:18,700 --> 00:02:20,943
‫E, por enquanto, vamos mantê-lo bem simples aqui.

50
00:02:20,943 --> 00:02:23,590
‫Portanto, tudo o que realmente queremos fazer

51
00:02:23,590 --> 00:02:27,100
‫para lidar com esse erro é enviar uma resposta ao cliente.

52
00:02:27,100 --> 00:02:29,893
‫Então res. status, mas agora

53
00:02:31,170 --> 00:02:35,100
‫não sabemos realmente qual é o código de status, certo?

54
00:02:35,100 --> 00:02:38,420
‫Por exemplo, neste caso aqui é um 404, mas temos

55
00:02:38,420 --> 00:02:41,650
‫alguns erros aqui, que têm outros códigos de status.

56
00:02:41,650 --> 00:02:46,020
‫Como temos um 400, por exemplo, para solicitação incorreta ou, na

57
00:02:46,020 --> 00:02:48,823
‫verdade, todos os tipos de outros códigos.

58
00:02:50,903 --> 00:02:53,142
‫E então realmente queremos ler o

59
00:02:53,142 --> 00:02:56,113
‫código de status do objeto de erro, certo?

60
00:02:57,480 --> 00:02:59,650
‫Então, quando criarmos esse erro um pouco mais

61
00:02:59,650 --> 00:03:01,143
‫tarde na segunda etapa,

62
00:03:01,143 --> 00:03:04,504
‫como eu disse a vocês, definiremos esse código de status no erro.

63
00:03:04,504 --> 00:03:08,943
‫Então, digamos o código de status, e agora quero definir

64
00:03:10,533 --> 00:03:11,962
‫um padrão aqui.

65
00:03:11,962 --> 00:03:14,620
‫Porque haverá erros que não virão de nós,

66
00:03:14,620 --> 00:03:17,090
‫porque haverá erros sem um código de

67
00:03:17,090 --> 00:03:19,590
‫status, portanto, erros que não são criados

68
00:03:19,590 --> 00:03:22,750
‫por nós, mas por exemplo em alguns outros lugares no

69
00:03:22,750 --> 00:03:24,240
‫aplicativo de notas.

70
00:03:24,240 --> 00:03:26,640
‫E eu sei que parece um pouco confuso por enquanto,

71
00:03:26,640 --> 00:03:28,770
‫mas você verá ao longo desta seção.

72
00:03:28,770 --> 00:03:31,790
‫Por enquanto, vamos realmente definir este código de

73
00:03:31,790 --> 00:03:32,623
‫status padrão.

74
00:03:33,550 --> 00:03:36,959
‫Portanto, dizemos que o erro. statuscode é

75
00:03:36,959 --> 00:03:40,446
‫igual a err. statuscode basicamente se é

76
00:03:40,446 --> 00:03:45,230
‫definido ou o código 500, o que significa novamente, erro interno do

77
00:03:45,230 --> 00:03:48,140
‫servidor, e então esse é geralmente o

78
00:03:48,140 --> 00:03:49,763
‫padrão que usamos.

79
00:03:50,660 --> 00:03:54,820
‫E da mesma forma, também definimos o status,

80
00:03:54,820 --> 00:03:59,820
‫então digamos erro. status é igual a erro. status se estiver

81
00:04:01,350 --> 00:04:03,713
‫definido, e se não, é

82
00:04:04,670 --> 00:04:05,760
‫erro.

83
00:04:05,760 --> 00:04:10,120
‫Portanto, o erro, lembre-se, é quando temos um código de status 500 e se

84
00:04:10,120 --> 00:04:13,033
‫for um código de status 400, é uma falha.

85
00:04:13,926 --> 00:04:16,723
‫Então, por exemplo, aqui neste 404, o status é falha.

86
00:04:18,597 --> 00:04:20,960
‫E agora aqui

87
00:04:20,960 --> 00:04:25,960
‫podemos usar isso, portanto, erro. statuscode e, em seguida, enviar algum json,

88
00:04:27,100 --> 00:04:29,363
‫muito semelhante ao que fizemos antes.

89
00:04:30,320 --> 00:04:34,830
‫Portanto, começamos com o status e o lemos a partir do erro. status e a

90
00:04:37,010 --> 00:04:40,473
‫mensagem virá do erro também.

91
00:04:41,380 --> 00:04:44,970
‫Então erre. mensagem e vou mostrar em um

92
00:04:44,970 --> 00:04:48,223
‫segundo como isso errou. a propriedade da mensagem aqui é criada.

93
00:04:49,750 --> 00:04:52,700
‫Tudo bem, mas por enquanto, este é o nosso middleware de tratamento

94
00:04:52,700 --> 00:04:54,000
‫de erros muito simples.

95
00:04:55,400 --> 00:04:58,190
‫Muito simples, mas por enquanto funciona.

96
00:04:58,190 --> 00:05:00,200
‫E agora a segunda etapa, em que

97
00:05:00,200 --> 00:05:01,830
‫realmente criamos um erro.

98
00:05:01,830 --> 00:05:03,680
‫E então vamos fazer isso aqui.

99
00:05:03,680 --> 00:05:06,270
‫Bem aqui nessa função, que lida com todas

100
00:05:06,270 --> 00:05:08,820
‫as rotas não tratadas, deixe-me comentar esta

101
00:05:08,820 --> 00:05:11,833
‫aqui e, em vez disso, queremos criar um erro.

102
00:05:12,973 --> 00:05:16,850
‫Digamos que const err e

103
00:05:18,080 --> 00:05:21,700
‫seja um novo erro.

104
00:05:21,700 --> 00:05:24,840
‫Portanto, basicamente usamos o construtor de erro embutido

105
00:05:24,840 --> 00:05:26,600
‫para criar um erro.

106
00:05:26,600 --> 00:05:29,320
‫E agora podemos passar uma string e essa string

107
00:05:29,320 --> 00:05:31,900
‫será a propriedade da mensagem de erro.

108
00:05:31,900 --> 00:05:35,163
‫Então, o que acabamos de falar aqui.

109
00:05:37,350 --> 00:05:40,113
‫Portanto, essa mensagem deve ser esta mensagem.

110
00:05:42,920 --> 00:05:43,753
‫Tudo bem?

111
00:05:45,600 --> 00:05:49,600
‫E então deveria dizer errar. status que é

112
00:05:51,680 --> 00:05:52,693
‫falha

113
00:05:55,830 --> 00:06:00,450
‫e, em seguida, errar. statusCode é igual a 404.

114
00:06:00,450 --> 00:06:03,610
‫Isso é o que mencionei antes que podemos definir o

115
00:06:03,610 --> 00:06:06,770
‫código de status e o status no objeto de erro.

116
00:06:06,770 --> 00:06:09,010
‫E isso é exatamente o que estamos fazendo aqui.

117
00:06:09,010 --> 00:06:10,950
‫Estamos criando um erro e, em

118
00:06:10,950 --> 00:06:14,220
‫seguida, definimos o status e as propriedades do código de status nele

119
00:06:14,220 --> 00:06:15,930
‫para que nosso middleware de

120
00:06:15,930 --> 00:06:18,150
‫tratamento de erros possa usá-los na próxima etapa.

121
00:06:18,150 --> 00:06:20,840
‫Mas agora, como realmente lemos a próxima etapa?

122
00:06:20,840 --> 00:06:23,390
‫Então, esse próximo middleware.

123
00:06:23,390 --> 00:06:26,650
‫Bem, como sempre, usamos a seguir.

124
00:06:26,650 --> 00:06:29,430
‫Mas desta vez usamos o próximo de uma maneira especial.

125
00:06:29,430 --> 00:06:32,100
‫Porque agora precisamos realmente passar esse erro para

126
00:06:32,100 --> 00:06:35,190
‫o próximo, então se a próxima função receber um

127
00:06:35,190 --> 00:06:37,460
‫argumento, não importa qual seja, o

128
00:06:37,460 --> 00:06:40,680
‫Express saberá automaticamente que houve um erro, então assumirá

129
00:06:40,680 --> 00:06:43,620
‫que tudo o que passarmos para o próximo

130
00:06:43,620 --> 00:06:44,950
‫será um erro.

131
00:06:44,950 --> 00:06:48,300
‫E isso se aplica a todas as próximas funções em cada

132
00:06:48,300 --> 00:06:50,803
‫middleware em qualquer lugar em nosso aplicativo.

133
00:06:51,950 --> 00:06:54,800
‫Então, novamente, sempre que passarmos algo para o próximo, ele

134
00:06:54,800 --> 00:06:57,250
‫assumirá que é um erro e, em seguida, irá

135
00:06:57,250 --> 00:06:59,670
‫ignorar todos os outros middlewares na pilha de

136
00:06:59,670 --> 00:07:02,250
‫middleware e enviar o erro que passamos para o

137
00:07:02,250 --> 00:07:04,680
‫nosso middleware de tratamento de erros global, que

138
00:07:04,680 --> 00:07:06,680
‫então , é claro, ser executado.

139
00:07:08,030 --> 00:07:10,090
‫E então vamos passar o

140
00:07:10,090 --> 00:07:12,350
‫erro que irá pular novamente, todos os

141
00:07:12,350 --> 00:07:15,393
‫outros middlewares na pilha e ir direto para este.

142
00:07:16,850 --> 00:07:18,430
‫Agora, neste caso,

143
00:07:18,430 --> 00:07:21,210
‫não há nenhum outro middleware no meio, certo?

144
00:07:21,210 --> 00:07:23,060
‫Portanto, é realmente apenas o próximo

145
00:07:23,060 --> 00:07:25,950
‫aqui, mas se usarmos next e passarmos um erro em

146
00:07:25,950 --> 00:07:28,603
‫outro lugar, é claro que funcionará da mesma forma.

147
00:07:29,720 --> 00:07:31,940
‫E então vamos agora testar tudo

148
00:07:31,940 --> 00:07:35,077
‫isso simplesmente tentando acessar uma rota que não foi definida.

149
00:07:35,077 --> 00:07:38,460
‫E então isso irá acionar todo esse código aqui, pular para o

150
00:07:38,460 --> 00:07:41,190
‫middleware de tratamento de erros e, em seguida, enviar

151
00:07:41,190 --> 00:07:43,700
‫de volta a resposta com base em toda

152
00:07:43,700 --> 00:07:44,773
‫essa lógica aqui.

153
00:07:47,420 --> 00:07:52,130
‫Então, aqui ainda temos nossa rota errada ou inexistente e

154
00:07:52,130 --> 00:07:55,220
‫vamos começar realmente chamando esta, que ainda

155
00:07:55,220 --> 00:07:57,023
‫deve estar funcionando, ok,

156
00:07:59,850 --> 00:08:01,650
‫então, apenas para confirmar

157
00:08:01,650 --> 00:08:05,050
‫que tudo está funcionando bem e funciona, e

158
00:08:05,050 --> 00:08:06,810
‫agora este.

159
00:08:06,810 --> 00:08:11,250
‫E, de fato, não conseguimos encontrar tours de barra de API neste servidor e,

160
00:08:11,250 --> 00:08:13,810
‫portanto, nosso middleware de tratamento de erros global

161
00:08:13,810 --> 00:08:15,560
‫está realmente fazendo seu trabalho.

162
00:08:15,560 --> 00:08:19,560
‫Perfeito, esse é o primeiro passo para realmente implementar um

163
00:08:19,560 --> 00:08:22,370
‫mecanismo de tratamento de erros muito melhor

164
00:08:22,370 --> 00:08:24,200
‫em nosso aplicativo.

165
00:08:24,200 --> 00:08:26,830
‫Portanto, podemos prosseguir e tentar implementar esse

166
00:08:26,830 --> 00:08:29,460
‫tipo de coisa aqui, em todos os

167
00:08:29,460 --> 00:08:30,310
‫nossos gerenciadores.

168
00:08:30,310 --> 00:08:34,160
‫Por exemplo, aqui em todas essas funções que temos

169
00:08:34,160 --> 00:08:35,060
‫aqui.

170
00:08:35,060 --> 00:08:37,410
‫Então, substituindo tudo o que temos aqui por

171
00:08:37,410 --> 00:08:38,850
‫esse tipo de erro.

172
00:08:38,850 --> 00:08:41,460
‫Mas o que quero fazer agora é realmente criar

173
00:08:41,460 --> 00:08:42,920
‫nossa própria classe de erro.

174
00:08:42,920 --> 00:08:46,330
‫Para que não tenhamos que escrever todo esse código aqui e,

175
00:08:46,330 --> 00:08:49,280
‫em vez disso, ter uma classe mais simplificada de

176
00:08:49,280 --> 00:08:50,113
‫nós mesmos.

177
00:08:50,113 --> 00:08:53,350
‫Essa é uma prática comum e vamos fazer isso no

178
00:08:53,350 --> 00:08:54,283
‫próximo vídeo.

