‫Instrutor: Bem-vindo de volta, agora, antes de
‫nos aprofundarmos no tratamento de erros real, vamos primeiro
‫escrever um manipulador para rotas indefinidas.
‫Então, basicamente, para rotas para as quais ainda não
‫atribuímos nenhum manipulador.
‫E, primeiro, precisamos iniciar nosso aplicativo aqui, o
‫qual não fechamos após a recente sessão de depuração.
‫Então o MPM começa.
‫E então vamos esperar por uma conexão com o banco de dados.
‫Aqui está, vamos agora ao Postman aqui e tentar acertar
‫a rota que ainda não definimos.
‫Vou seguir em frente, copiar esta
‫URL aqui, certo, e por
‫exemplo, digamos que em
‫vez
‫de tours apiV1, diríamos apenas api / tours.
‫Ok, então nesse caso obteríamos esse resultado HTML, certo,
‫então o Express automaticamente envia esse
‫código HTML aqui, junto com um código de
‫erro 404 Not Found caso não haja
‫nenhum manipulador para a rota que foi solicitada, ok.
‫Ou podemos simplesmente errar a ortografia do tour aqui, por exemplo.
‫Portanto, por exemplo, neste caso, ainda
‫obteríamos o mesmo erro.
‫Agora há também outra situação que é
‫se aqui após as turnês especificarmos algo mais,
‫digamos algo assim.
‫Vamos dar uma olhada no erro que obtemos,
‫e agora vemos que a conversão para o ID do objeto falhou.
‫E isso porque, na verdade, temos
‫uma rota que aceita um parâmetro de ID aqui após o passeio /, certo.
‫Portanto, o MongoDB está basicamente tentando encontrar um
‫documento com este ID, mas não pode convertê-lo em um ID
‫de objeto MongoDB válido.
‫Novamente, essa é uma situação diferente, vamos continuar trabalhando
‫com esta, então, novamente, onde obtemos esse
‫erro, mas neste formulário HTML.
‫Agora, como estamos fazendo uma API aqui,
‫não faz muito sentido enviar HTML de volta, certo, então vamos
‫corrigir isso e basicamente criar uma função de manipulação para
‫todas as rotas que não são armazenadas em cache por nossos roteadores.
‫Ok, então vamos voltar ao nosso aplicativo
‫aqui e abri-lo. js.
‫Ok, então essa é basicamente a
‫definição de nosso aplicativo Express.
‫Agora, antes de fazer qualquer outra coisa,
‫vamos realmente nos livrar deste middleware aqui que
‫não precisamos mais.
‫Então, apenas usamos isso aqui para
‫demonstrar o conceito de middleware e, neste ponto, não
‫precisamos mais disso.
‫Agora, como vamos implementar um manipulador de rota para
‫uma rota que não foi armazenada em cache por nenhum de
‫nossos outros manipuladores de rota?
‫Portanto, para fazer isso, lembre-se de que todas essas
‫funções de middleware são executadas na ordem em que estão no código.
‫E então a ideia é que se temos uma
‫solicitação que chega a este ponto aqui do nosso
‫código, isso significa que nem o
‫tourRouter nem o userRouter foram capazes de armazená-lo em cache, ok.
‫Portanto, se adicionarmos um middleware aqui após esses roteadores, ele
‫só será alcançado novamente se não for manipulado por
‫nenhum de nossos outros roteadores.
‫Então, vamos fazer isso e realmente entender como funciona depois
‫de já ter sido implementado.
‫Então, vamos implementar um gerenciador de rotas e,
‫por isso, dizemos app.
‫e agora o método HTTP para o
‫qual queremos especificar a rota.
‫Agora poderíamos usar get here right, assim como fizemos antes, mas
‫então e quanto às solicitações de postagem,
‫exclusão ou patch?
‫Você também teria que escrever manipuladores para eles,
‫e não queremos isso, simplesmente queremos lidar
‫com todas as rotas, então, todos os URLs, para todos os
‫verbos aqui neste manipulador, certo.
‫E assim, no Express, podemos usar o app. tudo.
‫E então isso vai rodar para todos
‫os verbos, Então, todo o método HTTP, tudo bem.
‫Em seguida, especificamos a URL, e como aqui
‫queremos lidar com todas as URLs que
‫não foram manipuladas antes, podemos usar a estrela aqui,
‫que vai representar tudo, certo, e então o resto é
‫apenas uma função regular de middleware ,
‫Assim como antes.
‫Portanto, solicite,
‫responda e a seguir.
‫Ok, e o que queremos fazer aqui?
‫Bem, simplesmente queremos enviar de volta
‫uma resposta no formato JSON, não o HTML que temos agora.
‫Então res. status,
‫e aqui vamos definir um 404, portanto, não encontrado
‫e, em seguida, uma resposta JSON, assim como o usual em
‫que definimos o status para falha.
‫Portanto, apenas uma resposta regular formatada adjacente.
‫E então algum tipo de mensagem aqui, e realmente
‫vamos fazer uma string de
‫modelo aqui, porque eu quero colocar uma variável lá.
‫Portanto, não consigo,
‫encontre.
‫E então podemos usar req. originalUrl ok, então essa
‫é uma propriedade que temos na solicitação que
‫é, como o nome diz, a URL que foi solicitada,
‫certo.
‫Essa nova resposta que enviaremos
‫agora é muito melhor do que
‫o HTML que recebíamos anteriormente, então vamos testar isso agora.
‫E, de fato, agora recebemos uma mensagem de erro JSON aqui.
‫E aqui também pegamos a URL que foi solicitada,
‫e de fato é aquela
‫que tentamos acessar, mas não está disponível, tudo bem, ótimo.
‫Agora, novamente, por que isso funcionou?
‫Então, novamente, a ideia é que se formos capazes de chegar a
‫este ponto aqui, isso significa que o ciclo de
‫resposta da solicitação ainda não
‫foi concluído neste ponto em nosso código, certo.
‫Porque lembre-se de que o middleware é adicionado à
‫pilha de middleware na ordem em que
‫está definido aqui em nosso código.
‫Basicamente, esse código aqui é executado primeiro
‫e, se a rota correspondesse aqui em
‫nosso tourRouter, nossa solicitação nunca alcançaria esse código e,
‫portanto, ele não seria executado.
‫E então esta deve ser basicamente a última
‫parte depois de todas as nossas outras rotas, tudo bem.
‫E se eu fosse, apenas
‫para tentar fazer isso, agora coloque isso
‫bem no topo do nosso aplicativo, então você verá
‫que não importa qual solicitação faremos, sempre obteremos a mesma resposta.
‫Certo, então vamos testar isso,
‫e de fato agora recebemos a mensagem de erro JS,
‫e isso é porque todas as
‫solicitações agora alcançam este manipulador de rota aqui, e são realmente
‫correspondidas porque é uma solicitação GET, que faz parte de todos os verbos, certo, e
‫em seguida, todas as rotas, de modo que todos os URLs são
‫armazenados em cache aqui e, portanto, é claro que
‫ele lida com aquele URL que acabamos de fazer aqui.
‫E o mesmo, por exemplo, para um tour de exclusão.
‫Então, a mesma coisa aconteceria,
‫sempre obteríamos a mesma resposta,
‫certo.
‫Então, é claro, vamos colocar de volta,
‫mas isso era apenas para demonstrar como e por que isso
‫funciona, tudo bem.
‫Ótimo, então esta é uma parte importante para tornar nossa
‫API um pouco mais amigável, mas a seguir vamos começar
‫a aprender sobre o tratamento de erros reais.