‫Instrutor: Então, depois de toda a conversa sobre middleware, vamos
‫agora realmente ir em
‫frente e criar nossas próprias funções de middleware.
‫E, novamente, lembre-se de que
‫na verdade já usamos middleware antes.
‫Então, vamos dar uma olhada nisso.
‫E, em algum lugar aqui.
‫E então, você vê que
‫para usar o middleware, usamos o app dot use, certo?
‫Portanto, o método de uso é aquele que usamos para,
‫sim, realmente usar o middleware.
‫Portanto, adicione middleware à nossa pilha de middleware, certo?
‫Portanto, este express dot json aqui chamando esse método json
‫basicamente retorna uma função, certo?
‫E então essa função é adicionada à pilha de middleware.
‫E assim, semelhante a
‫isso, podemos criar nossa própria função de middleware.
‫Então, vamos fazer isso agora.
‫E então, é claro, ainda precisamos usar o app dot use.
‫Ok, e agora, aqui, tudo o que precisamos fazer
‫é definir o caminho em nossa função que queremos adicionar à pilha de middleware.
‫Então, lembre-se do último vídeo
‫que, claro, em cada
‫função de middleware, temos acesso à solicitação e à resposta, ok?
‫Mas também temos a próxima função.
‫E então, assim, nós editamos como um terceiro argumento
‫para esta função de middleware, ok?
‫E assim, o Express sabe
‫que estamos realmente definindo um middleware aqui.
‫Tudo bem.
‫Agora, assim como
‫antes, na verdade, poderíamos ter chamado este argumento aqui
‫de outra coisa, como X, ou N, ou, isso realmente não importa.
‫O que importa é
‫que é o terceiro argumento para esta função.
‫Portanto, express basicamente passa a próxima função
‫como o terceiro argumento para esta função de middleware.
‫E podemos chamá-lo do que quisermos.
‫Mas, novamente, o próximo é realmente a convenção
‫in express, e
‫para evitar confusão, sempre usamos esse nome, ok?
‫E o mesmo para solicitação
‫e resposta, como mencionei antes, poderíamos chamá-los de outra coisa.
‫Mas a convenção é chamá-los assim.
‫De qualquer forma, vamos apenas registrar algo no
‫console, aqui nesta função de
‫middleware, apenas para que tenhamos algum código para realmente rodar
‫toda vez que houver uma nova solicitação.
‫Vamos dizer
‫olá do middleware.
‫E adicione um pouco de emoji aqui, novamente, para que ele se destaque um pouco.
‫Eu realmente gosto daquilo.
‫E o que acontece aqui?
‫Ah, certo.
‫Então esse é o código que queremos executar aqui.
‫E agora, assim como falamos no último
‫vídeo, na verdade precisamos chamar a próxima função, ok?
‫E se não chamarmos em
‫seguida aqui, bem, o ciclo de solicitação
‫/ resposta realmente ficará preso neste ponto.
‫Não poderíamos seguir
‫em frente e nunca enviaríamos uma resposta ao cliente.
‫Portanto, não posso deixar de enfatizar o quão importante
‫é nunca esquecer de usar o next em todo o seu middleware.
‫Ok, e é tão simples quanto isso.
‫Tudo o que precisamos fazer é especificar a seguir.
‫Então, esse argumento aqui.
‫E então realmente chame essa função assim.
‫OK.
‫E com isso, estamos realmente prontos para testá-lo.
‫E tudo o que
‫precisamos fazer é enviar uma solicitação simples para nossa API.
‫Então, aqui está a API.
‫Vamos fechar este aqui.
‫E então, isso realmente não importa, porque
‫isso, é claro, se aplica a todas as solicitações.
‫Então, vamos voltar.
‫E, de fato, recebemos o hello
‫do middleware registrado em nosso console, certo?
‫Tão bom.
‫E eu queria tocar rapidamente no que acabei
‫de dizer, que é que
‫este middleware aqui se aplica a cada solicitação, certo?
‫E isso porque não especificamos nenhuma rota.
‫Portanto, lembre-se de que antes eu disse que todos os manipuladores de
‫rota aqui são, na verdade, um tipo de middleware.
‫Eles são simplesmente funções de
‫middleware que se aplicam apenas a uma determinada URL.
‫Então, uma certa rota, ok.
‫Mas essas funções de middleware mais simples
‫que definimos aqui,
‫bem, elas se aplicam a cada solicitação.
‫Pelo menos, se o manipulador de
‫rota vier antes deste middleware.
‫Então, deixe-me mostrar algo a você.
‫E vou cortá-lo a partir daqui
‫e agora colocá-lo aqui após
‫este manipulador de rota.
‫Então, o que você acha que vai
‫acontecer agora, quando eu fizer uma ligação para essa rota?
‫Então vamos ver o que acontece.
‫Essa rota exata, aquela que acabei de mostrar, deixe-me enviar
‫a solicitação para ela.
‫E agora vamos voltar e agora não temos
‫olá do middleware.
‫Então, por que isso?
‫Bem, simplesmente porque esse middleware, então
‫esse manipulador de rota
‫aqui, vem antes dessa função de middleware que temos aqui.
‫E esse gerenciador de rota, que neste
‫caso, obter todos os passeios, na verdade encerra o ciclo de resposta da solicitação.
‫Então, vamos dar uma olhada nisso.
‫Portanto, temos todos os passeios.
‫Então, onde fica isso?
‫Sim, então aqui está a função e, ao enviar um
‫resultado com res ponto json,
‫encerramos o ciclo de resposta da solicitação.
‫E então o próximo middleware na
‫pilha, que neste caso,
‫é este, então nosso customizado não será chamado.
‫Novamente, porque o ciclo já terminou, tudo bem.
‫Portanto, certifique-se de entender que esta ordem
‫realmente importa muito no expresso, ok.
‫É fundamental entender que é
‫assim que os aplicativos expressos funcionam, ok.
‫Então, para testar isso, vamos tentar
‫ver o que acontece
‫quando fazemos uma solicitação para essa rota.
‫Então, para obter o tour de atualização ou excluir o tour.
‫Então vamos fazer este aqui, enviar a solicitação
‫aqui, e vamos voltar e agora temos o
‫alô do middleware.
‫Então era isso que esperávamos, certo?
‫Isso porque, é claro, esse middleware aqui agora
‫está antes do manipulador de rotas.
‫E assim é, é claro, parte da pilha de
‫middleware que é executada antes que o ciclo de resposta da solicitação termine.
‫Tudo bem, faz sentido?
‫Portanto, vamos voltar atrás e, geralmente, definimos
‫esse tipo de middleware global aqui,
‫antes de todos os nossos manipuladores de rota.
‫Tudo bem, então esta é uma função
‫de middleware muito simples que acabamos de definir para executar alguns códigos.
‫Mas vamos fazer outro.
‫E, claro,
‫podemos ter quantas funções de middleware quisermos.
‫E desta vez, queremos
‫realmente manipular o objeto de solicitação.
‫Portanto, a assinatura aqui é sempre
‫a mesma, sempre solicitação, resposta e próximo.
‫E agora vamos realmente manipular a solicitação.
‫Nesse caso, tudo o
‫que queremos fazer é adicionar a hora atual à solicitação.
‫Portanto, podemos simplesmente definir uma
‫propriedade no objeto de solicitação chamada tempo de solicitação.
‫Em seguida, defina-o para uma nova
‫data,
‫que basicamente se traduz em agora.
‫E então podemos usar uma função de data muito útil,
‫que é chamada de string ISO, que então
‫a converterá em uma string legal
‫e legível para nós.
‫Então, vamos fingir que temos algum manipulador de
‫rota que realmente precisa das
‫informações sobre quando exatamente a solicitação acontece.
‫Portanto, a solução muito simples é
‫simplesmente adicionar algo assim a uma solicitação usando middleware.
‫Tudo bem?
‫Agora, não se esqueça,
‫é claro, de chamar o próximo middleware na pilha, certo.
‫Então, agora, temos solicitação, tempo em todas as solicitações.
‫Portanto, agora podemos usar algum gerenciador de rota aqui,
‫por exemplo, (resmungos) para fazer com que todos os passeios
‫simplesmente registrem isso para nós no console.
‫Portanto, o ponto log do console e seu tempo de solicitação real.
‫Ok, ou podemos até mesmo enviar isso na resposta também.
‫Deixe-me testar isso.
‫E vamos chamar
‫este solicitado em e req ponto request time.
‫É esse mesmo.
‫E então, sim, vamos prosseguir e descobrir isso.
‫Então nosso middleware está correto, certo?
‫Sim, então ligamos em seguida, quando terminarmos, e
‫vamos testar isso agora.
‫Lembre-se de que todos os tours estão disponíveis.
‫E quando voltarmos agora, ou quando subirmos,
‫bem, deveria realmente estar aqui.
‫Então, o que há de errado aqui?
‫Veja que
‫aqui embaixo, na verdade apenas registramos
‫uma função e sim, é claro, não chamamos as duas strings ISO.
‫Portanto, é um método que temos que chamá-lo.
‫Então, salve-o e tente novamente.
‫E agora solicitamos a data de hoje.
‫Tão perfeito.
‫Isso veio do nosso middleware.
‫Simplesmente porque adicionamos essa propriedade à nossa solicitação.
‫Excelente.
‫Espero que com isso você tenha dado um grande passo
‫para entender realmente como o aplicativo Node funciona, como o middleware
‫funciona, como todo
‫o ciclo de resposta da solicitação funciona, porque
‫isso realmente fará toda a diferença
‫quando você estiver escrevendo seus próprios aplicativos.