﻿1
00:00:00,860 --> 00:00:03,680
‫Instrutor: Bem-vindo de volta, agora, antes de

2
00:00:03,680 --> 00:00:06,820
‫nos aprofundarmos no tratamento de erros real, vamos primeiro

3
00:00:06,820 --> 00:00:09,430
‫escrever um manipulador para rotas indefinidas.

4
00:00:09,430 --> 00:00:12,250
‫Então, basicamente, para rotas para as quais ainda não

5
00:00:12,250 --> 00:00:13,403
‫atribuímos nenhum manipulador.

6
00:00:14,800 --> 00:00:17,820
‫E, primeiro, precisamos iniciar nosso aplicativo aqui, o

7
00:00:17,820 --> 00:00:21,053
‫qual não fechamos após a recente sessão de depuração.

8
00:00:21,950 --> 00:00:23,363
‫Então o MPM começa.

9
00:00:25,260 --> 00:00:28,290
‫E então vamos esperar por uma conexão com o banco de dados.

10
00:00:28,290 --> 00:00:33,290
‫Aqui está, vamos agora ao Postman aqui e tentar acertar

11
00:00:33,640 --> 00:00:36,810
‫a rota que ainda não definimos.

12
00:00:36,810 --> 00:00:39,793
‫Vou seguir em frente, copiar esta

13
00:00:41,892 --> 00:00:44,260
‫URL aqui, certo, e por

14
00:00:44,260 --> 00:00:46,410
‫exemplo, digamos que em

15
00:00:48,240 --> 00:00:49,490
‫vez

16
00:00:49,490 --> 00:00:53,223
‫de tours apiV1, diríamos apenas api / tours.

17
00:00:54,140 --> 00:00:58,400
‫Ok, então nesse caso obteríamos esse resultado HTML, certo,

18
00:00:58,400 --> 00:01:01,470
‫então o Express automaticamente envia esse

19
00:01:01,470 --> 00:01:05,380
‫código HTML aqui, junto com um código de

20
00:01:05,380 --> 00:01:08,700
‫erro 404 Not Found caso não haja

21
00:01:08,700 --> 00:01:12,900
‫nenhum manipulador para a rota que foi solicitada, ok.

22
00:01:12,900 --> 00:01:16,483
‫Ou podemos simplesmente errar a ortografia do tour aqui, por exemplo.

23
00:01:17,640 --> 00:01:19,850
‫Portanto, por exemplo, neste caso, ainda

24
00:01:19,850 --> 00:01:21,840
‫obteríamos o mesmo erro.

25
00:01:21,840 --> 00:01:25,210
‫Agora há também outra situação que é

26
00:01:25,210 --> 00:01:29,580
‫se aqui após as turnês especificarmos algo mais,

27
00:01:29,580 --> 00:01:31,800
‫digamos algo assim.

28
00:01:31,800 --> 00:01:34,790
‫Vamos dar uma olhada no erro que obtemos,

29
00:01:34,790 --> 00:01:38,470
‫e agora vemos que a conversão para o ID do objeto falhou.

30
00:01:38,470 --> 00:01:40,560
‫E isso porque, na verdade, temos

31
00:01:40,560 --> 00:01:45,390
‫uma rota que aceita um parâmetro de ID aqui após o passeio /, certo.

32
00:01:45,390 --> 00:01:48,770
‫Portanto, o MongoDB está basicamente tentando encontrar um

33
00:01:48,770 --> 00:01:53,180
‫documento com este ID, mas não pode convertê-lo em um ID

34
00:01:53,180 --> 00:01:55,160
‫de objeto MongoDB válido.

35
00:01:55,160 --> 00:01:58,810
‫Novamente, essa é uma situação diferente, vamos continuar trabalhando

36
00:01:59,820 --> 00:02:02,930
‫com esta, então, novamente, onde obtemos esse

37
00:02:02,930 --> 00:02:05,550
‫erro, mas neste formulário HTML.

38
00:02:05,550 --> 00:02:08,330
‫Agora, como estamos fazendo uma API aqui,

39
00:02:08,330 --> 00:02:12,070
‫não faz muito sentido enviar HTML de volta, certo, então vamos

40
00:02:12,070 --> 00:02:15,400
‫corrigir isso e basicamente criar uma função de manipulação para

41
00:02:15,400 --> 00:02:19,270
‫todas as rotas que não são armazenadas em cache por nossos roteadores.

42
00:02:19,270 --> 00:02:22,610
‫Ok, então vamos voltar ao nosso aplicativo

43
00:02:22,610 --> 00:02:25,540
‫aqui e abri-lo. js.

44
00:02:25,540 --> 00:02:27,950
‫Ok, então essa é basicamente a

45
00:02:27,950 --> 00:02:30,180
‫definição de nosso aplicativo Express.

46
00:02:30,180 --> 00:02:32,530
‫Agora, antes de fazer qualquer outra coisa,

47
00:02:32,530 --> 00:02:35,190
‫vamos realmente nos livrar deste middleware aqui que

48
00:02:35,190 --> 00:02:36,700
‫não precisamos mais.

49
00:02:36,700 --> 00:02:39,360
‫Então, apenas usamos isso aqui para

50
00:02:39,360 --> 00:02:43,160
‫demonstrar o conceito de middleware e, neste ponto, não

51
00:02:43,160 --> 00:02:45,080
‫precisamos mais disso.

52
00:02:45,080 --> 00:02:47,980
‫Agora, como vamos implementar um manipulador de rota para

53
00:02:47,980 --> 00:02:51,410
‫uma rota que não foi armazenada em cache por nenhum de

54
00:02:51,410 --> 00:02:53,380
‫nossos outros manipuladores de rota?

55
00:02:53,380 --> 00:02:56,160
‫Portanto, para fazer isso, lembre-se de que todas essas

56
00:02:56,160 --> 00:02:59,770
‫funções de middleware são executadas na ordem em que estão no código.

57
00:02:59,770 --> 00:03:02,930
‫E então a ideia é que se temos uma

58
00:03:02,930 --> 00:03:06,210
‫solicitação que chega a este ponto aqui do nosso

59
00:03:06,210 --> 00:03:08,760
‫código, isso significa que nem o

60
00:03:08,760 --> 00:03:12,860
‫tourRouter nem o userRouter foram capazes de armazená-lo em cache, ok.

61
00:03:12,860 --> 00:03:16,590
‫Portanto, se adicionarmos um middleware aqui após esses roteadores, ele

62
00:03:16,590 --> 00:03:20,060
‫só será alcançado novamente se não for manipulado por

63
00:03:20,060 --> 00:03:22,470
‫nenhum de nossos outros roteadores.

64
00:03:22,470 --> 00:03:25,610
‫Então, vamos fazer isso e realmente entender como funciona depois

65
00:03:25,610 --> 00:03:27,550
‫de já ter sido implementado.

66
00:03:27,550 --> 00:03:29,600
‫Então, vamos implementar um gerenciador de rotas e,

67
00:03:29,600 --> 00:03:30,923
‫por isso, dizemos app.

68
00:03:32,450 --> 00:03:34,540
‫e agora o método HTTP para o

69
00:03:34,540 --> 00:03:36,380
‫qual queremos especificar a rota.

70
00:03:36,380 --> 00:03:40,630
‫Agora poderíamos usar get here right, assim como fizemos antes, mas

71
00:03:40,630 --> 00:03:43,410
‫então e quanto às solicitações de postagem,

72
00:03:43,410 --> 00:03:45,030
‫exclusão ou patch?

73
00:03:45,030 --> 00:03:47,730
‫Você também teria que escrever manipuladores para eles,

74
00:03:47,730 --> 00:03:50,190
‫e não queremos isso, simplesmente queremos lidar

75
00:03:50,190 --> 00:03:54,270
‫com todas as rotas, então, todos os URLs, para todos os

76
00:03:54,270 --> 00:03:56,707
‫verbos aqui neste manipulador, certo.

77
00:03:56,707 --> 00:03:59,710
‫E assim, no Express, podemos usar o app. tudo.

78
00:03:59,710 --> 00:04:02,460
‫E então isso vai rodar para todos

79
00:04:02,460 --> 00:04:05,430
‫os verbos, Então, todo o método HTTP, tudo bem.

80
00:04:05,430 --> 00:04:08,270
‫Em seguida, especificamos a URL, e como aqui

81
00:04:08,270 --> 00:04:10,920
‫queremos lidar com todas as URLs que

82
00:04:10,920 --> 00:04:13,950
‫não foram manipuladas antes, podemos usar a estrela aqui,

83
00:04:13,950 --> 00:04:17,320
‫que vai representar tudo, certo, e então o resto é

84
00:04:17,320 --> 00:04:19,920
‫apenas uma função regular de middleware ,

85
00:04:19,920 --> 00:04:21,183
‫Assim como antes.

86
00:04:23,980 --> 00:04:24,893
‫Portanto, solicite,

87
00:04:26,210 --> 00:04:27,883
‫responda e a seguir.

88
00:04:29,270 --> 00:04:32,290
‫Ok, e o que queremos fazer aqui?

89
00:04:32,290 --> 00:04:34,700
‫Bem, simplesmente queremos enviar de volta

90
00:04:34,700 --> 00:04:38,653
‫uma resposta no formato JSON, não o HTML que temos agora.

91
00:04:40,100 --> 00:04:41,573
‫Então res. status,

92
00:04:43,100 --> 00:04:46,110
‫e aqui vamos definir um 404, portanto, não encontrado

93
00:04:48,220 --> 00:04:52,190
‫e, em seguida, uma resposta JSON, assim como o usual em

94
00:04:52,190 --> 00:04:54,343
‫que definimos o status para falha.

95
00:04:57,090 --> 00:05:01,153
‫Portanto, apenas uma resposta regular formatada adjacente.

96
00:05:03,590 --> 00:05:05,980
‫E então algum tipo de mensagem aqui, e realmente

97
00:05:05,980 --> 00:05:07,580
‫vamos fazer uma string de

98
00:05:07,580 --> 00:05:09,790
‫modelo aqui, porque eu quero colocar uma variável lá.

99
00:05:09,790 --> 00:05:11,370
‫Portanto, não consigo,

100
00:05:11,370 --> 00:05:12,203
‫encontre.

101
00:05:13,380 --> 00:05:16,650
‫E então podemos usar req. originalUrl ok, então essa

102
00:05:18,220 --> 00:05:21,900
‫é uma propriedade que temos na solicitação que

103
00:05:21,900 --> 00:05:26,233
‫é, como o nome diz, a URL que foi solicitada,

104
00:05:27,300 --> 00:05:28,270
‫certo.

105
00:05:28,270 --> 00:05:30,610
‫Essa nova resposta que enviaremos

106
00:05:30,610 --> 00:05:33,230
‫agora é muito melhor do que

107
00:05:33,230 --> 00:05:37,163
‫o HTML que recebíamos anteriormente, então vamos testar isso agora.

108
00:05:40,440 --> 00:05:44,020
‫E, de fato, agora recebemos uma mensagem de erro JSON aqui.

109
00:05:44,020 --> 00:05:47,970
‫E aqui também pegamos a URL que foi solicitada,

110
00:05:47,970 --> 00:05:50,586
‫e de fato é aquela

111
00:05:50,586 --> 00:05:54,760
‫que tentamos acessar, mas não está disponível, tudo bem, ótimo.

112
00:05:54,760 --> 00:05:57,240
‫Agora, novamente, por que isso funcionou?

113
00:05:57,240 --> 00:06:01,200
‫Então, novamente, a ideia é que se formos capazes de chegar a

114
00:06:01,200 --> 00:06:04,120
‫este ponto aqui, isso significa que o ciclo de

115
00:06:04,120 --> 00:06:06,281
‫resposta da solicitação ainda não

116
00:06:06,281 --> 00:06:09,100
‫foi concluído neste ponto em nosso código, certo.

117
00:06:09,100 --> 00:06:11,780
‫Porque lembre-se de que o middleware é adicionado à

118
00:06:11,780 --> 00:06:14,040
‫pilha de middleware na ordem em que

119
00:06:14,040 --> 00:06:16,010
‫está definido aqui em nosso código.

120
00:06:16,010 --> 00:06:18,810
‫Basicamente, esse código aqui é executado primeiro

121
00:06:18,810 --> 00:06:21,840
‫e, se a rota correspondesse aqui em

122
00:06:21,840 --> 00:06:25,230
‫nosso tourRouter, nossa solicitação nunca alcançaria esse código e,

123
00:06:25,230 --> 00:06:27,660
‫portanto, ele não seria executado.

124
00:06:27,660 --> 00:06:30,050
‫E então esta deve ser basicamente a última

125
00:06:30,050 --> 00:06:32,560
‫parte depois de todas as nossas outras rotas, tudo bem.

126
00:06:32,560 --> 00:06:35,240
‫E se eu fosse, apenas

127
00:06:35,240 --> 00:06:38,140
‫para tentar fazer isso, agora coloque isso

128
00:06:39,230 --> 00:06:43,260
‫bem no topo do nosso aplicativo, então você verá

129
00:06:43,260 --> 00:06:47,750
‫que não importa qual solicitação faremos, sempre obteremos a mesma resposta.

130
00:06:47,750 --> 00:06:49,653
‫Certo, então vamos testar isso,

131
00:06:51,550 --> 00:06:54,600
‫e de fato agora recebemos a mensagem de erro JS,

132
00:06:54,600 --> 00:06:56,600
‫e isso é porque todas as

133
00:06:56,600 --> 00:06:59,850
‫solicitações agora alcançam este manipulador de rota aqui, e são realmente

134
00:06:59,850 --> 00:07:04,290
‫correspondidas porque é uma solicitação GET, que faz parte de todos os verbos, certo, e

135
00:07:04,290 --> 00:07:08,060
‫em seguida, todas as rotas, de modo que todos os URLs são

136
00:07:08,060 --> 00:07:10,760
‫armazenados em cache aqui e, portanto, é claro que

137
00:07:10,760 --> 00:07:13,920
‫ele lida com aquele URL que acabamos de fazer aqui.

138
00:07:13,920 --> 00:07:17,333
‫E o mesmo, por exemplo, para um tour de exclusão.

139
00:07:18,330 --> 00:07:20,590
‫Então, a mesma coisa aconteceria,

140
00:07:20,590 --> 00:07:22,573
‫sempre obteríamos a mesma resposta,

141
00:07:23,740 --> 00:07:24,573
‫certo.

142
00:07:25,430 --> 00:07:28,500
‫Então, é claro, vamos colocar de volta,

143
00:07:28,500 --> 00:07:33,183
‫mas isso era apenas para demonstrar como e por que isso

144
00:07:34,100 --> 00:07:35,670
‫funciona, tudo bem.

145
00:07:35,670 --> 00:07:38,890
‫Ótimo, então esta é uma parte importante para tornar nossa

146
00:07:38,890 --> 00:07:42,150
‫API um pouco mais amigável, mas a seguir vamos começar

147
00:07:42,150 --> 00:07:44,873
‫a aprender sobre o tratamento de erros reais.

