Atualmente, express.js é um dos frameworks mais utilizados em aplicações node.js.
Sua documentação e facilidade de iniciar um servidor, tornam ele um must have de todo desenvolvedor node.
No entanto, é comum que muitas possibilidades e alternativas acabem passando desapercebidas no momento que estamos desenvolvendo.
E esse é o foco desse artigo: Aprofundar os conhecimentos nos middlewares utilizando express.
Iniciando o projeto
Você vai precisar instalar node em sua máquina e em seguida criar um projeto utilizando npm ou yarn
Escolha uma pasta e dentro dela, via terminal:
npm init -y ou yarn init -y
Instalando dependências
Vamos instalar o express e o morgan como dependências do projeto.
npm install express morgan --save
Crie um arquivo index.js e cole o seguinte código:
No seu terminal,dê um node index.js e, no navegador, acesse localhost:3000.
Faça isso para todos os arquivos que iremos criar a partir desse momento- não esqueça de prestar atenção aos endpoints das rotas!!!
Esse é o uso básico. Dessa maneira conseguimos criar um servidor com poucas linhas. No entanto, podemos fazer ainda mais.
Segundo a própria documentação sobre middlewares: "um aplicativo express é uma série de chamadas de funções de middleware"
Isso significa que podemos manipular os objetos req e res antes de passar os dados da requisição para o próximo middleware:
Essa possibilidade de customização é a base do nosso artigo.
Podemos alterar variáveis e até mesmo criar novas, passando funções e valores que ficam disponíveis globalmente, inclusive.
Novidade isso não é, uma vez que iniciando um app express, geralmente utilizamos recursos como loggers:
No início do arquivo declaramos o morgan e dois routers.
O morgan tem o trabalho de nos mostrar as requisições que chegam, interceptando o objeto req e nos mostrando os dados, dando possibilidade de até um certo nível de customização.
Já no router1, adicionamos ao objeto req a chave propriedade, ou seja, estamos dizendo ao aplicativo que toda e qualquer rota que estiver dentro desse Router receberá o valor de propriedade.
Já ao acessar o router2, não conseguimos printar o conteúdo de propriedade pois essa variável não existe dentro desse contexto de roteamento.
Possíveis usos:
1 - Sistema de log:
Esse uso é bem simplório, mas efetivo.
Basicamente passamos uma função para o nosso router principal(ou raiz)
Essa função poderia ser qualquer coisa. Desde salvar dados no banco a trazer dados do banco, por exemplo. No entanto, será utilizada para fins de log.
2 -Sistema de permissão
O uso nesse caso é um tipo de permissão estática.
Caso você acesse a rota /proibido, não irá conseguir ver o conteúdo. A propriedade isAdmin tem o valor false, logo, o middleware entende que não vai ser possível passar para o próximo .
3 - Uso interno de eventos(Event emmiters)
O uso de eventos é de uso mais intermediário dentro da comunidade do node. No entanto, caso a sua aplicação seja event-driven e você necessite desencadear uma ação que o gatilho esteja dentro de alguma rota, esse é o caminho.
Cuidado
O uso desses middlewares pode significar um tipo de injeção de dependências dentro dos controllers do sistema. De um ponto de vista arquitetural, eles podem deixar seus módulos mais acoplados que o necessário, deixando o código mais suscetível a falhas. O recomendado nesse caso é sempre deixar o seu código o mais testado possível, diminuindo as chances de causar problemas generalizados
Github
O repositório com todos os exemplos de códigos acima:
https://github.com/sousacaio/artigo-middleware-express
Conclusão
Middlewares podem ser muito úteis. Eles permitem uma gama de variedades dentro de cada contexto de roteamento do seu sistema, dependendo da necessidade, claro. Espero que esse tutorial tenha te ajudado a entender o que eles são e como utilizá-los.
Se você chegou até aqui, fique a vontade para contribuir e obrigado pela leitura!
Top comments (0)