‫-: (Homem) Então, nesta aula, você aprenderá
‫como encadear várias funções de middleware para a mesma rota.
‫Portanto, até este ponto, sempre que
‫queríamos definir um middleware, apenas passávamos uma função de middleware.
‫Então, por exemplo aqui, para lidar com esta solicitação de postagem,
‫bem, nós apenas passamos esta função de middleware
‫que é nosso manipulador createTour.
‫OK? E essa é a
‫única função que será chamada sempre que recebermos uma solicitação de postagem.
‫Direito? Mas vamos dizer agora
‫que queremos realmente executar várias funções de middleware.
‫Agora você pode perguntar "Por que faríamos isso? "
‫Bem, podemos, por exemplo, executar um middleware antes de
‫createTour aqui para realmente verificar os dados que
‫chegam no corpo.
‫Direito? É um pouco parecido com o que tínhamos antes.
‫Portanto, fizemos esta verificação de middleware de ID antes
‫para verificar se o ID é realmente válido e fora
‫dos manipuladores de rota reais,
‫para que eles se preocupem apenas em obter, atualizar ou excluir
‫um tour.
‫Direito? E aqui, neste exemplo específico com
‫postagem, podemos querer fazer a mesma coisa.
‫Então, como eu disse, podemos querer verificar se o pedido. buddy realmente contém
‫os dados que desejamos para o passeio.
‫OK? E então vamos fazer isso.
‫E, na verdade, quero que você primeiro faça por conta própria.
‫Portanto, esse é um tipo de desafio que desejo que você
‫conclua para usar os conceitos sobre os quais
‫falamos tantas vezes neste ponto e criar sua própria
‫função de middleware.
‫Então, deixe-me escrever aqui como um comentário.
‫Então, eu
‫quero que você crie uma função de middleware checkBody e
‫nela eu quero que
‫você verifique se o corpo contém a propriedade name para o nome do
‫tour e a propriedade price.
‫Tudo bem? E se não, quero que você envie de
‫volta um código de status quatrocentos.
‫Caso contrário, devolva quatrocentos, o que significa
‫pedido incorreto.
‫Então, basicamente, uma solicitação inválida do cliente, que neste
‫caso, está tentando criar um novo passeio sem um nome e
‫sem uma propriedade de preço.
‫OK! E é isso mesmo.
‫E (risos) na verdade não.
‫Portanto, também quero que você o adicione à pilha do manipulador de postagem.
‫Basicamente. OK?
‫Então, eu quero que você adicione aqui.
‫E vou realmente dizer a você
‫como fazer isso porque não o fizemos neste momento.
‫Então é muito fácil. Digamos que nossa função seja chamada de
‫middleware e, portanto, o que você precisa fazer é
‫simplesmente adicionar essa função aqui, antes do manipulador createTour que
‫criará o tour. OK?
‫Assim, quando tivermos uma solicitação de postagem para essa
‫rota, ele executará esse middleware primeiro e só
‫depois o createTour.
‫OK? Então é assim que encadeamos dois middlewares diferentes.
‫Mas agora quero que você vá em frente e crie este
‫middleware, na verdade, chamado checkBody.
‫Portanto, pause o vídeo agora e tente fazê-lo por conta própria.
‫OK! Espero que você tenha tido
‫sucesso fazendo isso, tenha testado e tudo funcione.
‫Agora, deixe-me ir em frente e implementá-lo do meu jeito.
‫Portanto, temos esse erro aqui, mas não se preocupe com isso.
‫É por causa desse middleware que não está definido.
‫E então deixe-me fazer isso aqui logo após o middleware checkID.
‫Portanto, as exportações. checkBody.
‫Temos que solicitar resposta e em seguida.
‫E então é realmente muito simples.
‫Portanto, se não houver pedido. corpo. nome, e acho que
‫esse é o nome, mas vamos
‫rapidamente em frente e verificar isso.
‫Então aqui está um tour simples.
‫Sim, e de fato é chamado de 'nome'
‫e o outro é 'preço'.
‫Portanto, se não houver nome do corpo da solicitação
‫ou nenhum corpo da solicitação. bom preço, neste
‫caso, iremos, como antes, retornar desta função e
‫enviar de volta uma resposta.
‫Portanto, o status aqui é lembrado: quatrocentos e depois algum
‫'json' onde o status é falha.
‫Então é sempre quando temos um código de quatrocentos.
‫Adicione a mensagem
‫"Nome
‫ou preço ausente".
‫OK? Portanto, o preço e o nome precisam estar presentes ao mesmo tempo.
‫Portanto, se o preço não estiver lá ou o nome não estiver
‫lá, já enviamos esta mensagem de erro.
‫OK? Mas se tudo estiver correto, então queremos
‫passar para o próximo middleware.
‫E é isso que dizemos aqui.
‫E o próximo middleware será, obviamente, o createTour.
‫Então, este aqui.
‫Então, vamos prosseguir e adicioná-lo aqui.
‫Então, tourController. checkBody.
‫Tudo bem, agora o erro desapareceu e devemos ser
‫capazes de testá-lo agora. Então, vamos fechar aqueles
‫nos quais não estamos interessados e criar um novo tour.
‫Portanto, agora temos nosso corpo com o nome, a duração
‫e a dificuldade, mas não há preço.
‫Portanto, agora devemos obter nosso erro. Direito?
‫Então, vamos testar isso. Mandar. E, de fato,
‫temos 'Nome ou preço ausente' em nosso pedido incorreto de quatrocentos.
‫OK? E então vamos analisar o que aconteceu aqui novamente.
‫Então nosso pedido atingiu essa rota aqui e foi
‫um pedido de postagem. E então, ele executa essa
‫função de middleware e, a partir dessa função, enviamos essa uh
‫resposta dizendo que, bem, o nome ou o preço está faltando.
‫OK? Mas se agora adicionar o preço ... então realmente
‫não importa o preço, envie-o, então
‫tudo funciona bem e nós temos um 201 criado.
‫Então o que aconteceu desta vez? Bem, ele verificou o corpo e esta
‫condição não era verdadeira e
‫então chamou o próximo middleware na pilha que é createTour.
‫Então, ele criou um tour e devolveu o resultado
‫e assim, encerrou o ciclo de solicitação-resposta.
‫Direito? Espero que tenha sido um pequeno desafio e
‫que estejamos usando esse tipo
‫de lógica aqui o tempo todo, onde encadeamos vários
‫tipos de manipuladores aqui para a mesma rota. Então por exemplo aqui poderíamos verificar se um determinado usuário está
‫logado ou se ele tem
‫os privilégios, então os direitos de acesso, até mesmo para escrever um novo tour.
‫Ou realmente todos os tipos de coisas que queremos que
‫aconteçam antes de a turnê ser criada.
‫OK? E mais uma vez fazemos isso porque queremos pegar
‫toda a lógica que não
‫está realmente preocupada em criar o novo recurso fora desse manipulador. Para que esse manipulador se preocupe apenas
‫realmente com o
‫trabalho que deve fazer.