MAIS UM BLOG

Sim, mais um blog nas interwebz!

Entendendo como funciona o Express e os Middlewares no Node.js

Neste artigo você vai aprender:

  • O que é e como funciona o framework Express.
  • O que são e como utilizar middlewares no Express.
  • Como funciona o ciclo request-response.

Entendendo o que é o Express

O Express é um dos frameworks mais populares do universo Node.js. Basicamente ele é um framework web que auxilia o desenvolvimento de APIs, gerenciando requisições HTTP, e também auxilia a criação de servidores web a partir do uso de middlewares.

Mas o que é um middleware?

Mas o que é um middleware?
Errr…O quê?

Segundo a definição da empresa RedHat, middleware é “um software que fornece serviços e recursos comuns a aplicações”. Ainda de acordo com a RedHat, com o middleware, “os desenvolvedores podem criar aplicações com mais facilidade e eficiência, pois esse tipo de software tem o papel de conectar aplicações, dados e usuários”.

Ou seja, um middleware é uma aplicação que vai auxiliar outra aplicação a realizar alguma tarefa. No caso de uma aplicação desenvolvida utilizando o Express, ela é composta por uma séeeerie de middlewares, como se estivéssemos montando um Lego, encaixando várias pecinhas que se comunicam umas com as outras.

E como utilizar middlewares no Express?

O Express mantém uma série de middlewares, cada qual com o seu objetivo. Há middleware para manipulação de erros, para trabalhar com sessões de usuário, parâmetros de URL, dentre outros. Você pode encontrar a lista completa dos middlewares mantidos pela equipe do Express no próprio site deles.

Como o objetivo principal do Express é auxiliar o desenvolvimento de APIs, os middlewares nele são funções que têm acesso ao objeto request, ao objeto response e ao middleware next. Ou seja, em qualquer parte do seu código que você esteja usando um middleware Express, você terá acesso a esses objetos.

O objeto request corresponde a uma requisição feita e o objeto response corresponde a resposta dada a essa requisição.

Para ilustrar, vamos ver esse trecho de código:

var express = require('express')
var app = express()

app.get('/', function (req, res, next) {
  res.send('Hello World!')
})

app.listen(3000)

Neste trecho de código, app é uma aplicação Express que pode ser acessada no endereço http://localhost:3000. Toda vez que essa aplicação receber uma requisição HTTP GET no endereço ” / “, aquela função middleware vai responder com uma mensagem “Hello World”.

O Ciclo Request-Response

Uma aplicação Express é construída seguindo este formato e lógica, em que há funções middlewares para receber e responder requisições. Deste modo, o Express funciona de acordo com o ciclo “request-response”. O ciclo se inicia quando uma requisição é recebida e ele só se encerra quando ela é respondida. Se o middleware que recebe a requisição não respondê-la, ou seja, não encerrar o ciclo “request-response”, ele deve chamar a função “next()” para passar o controle para o próximo middleware, caso contrário, a requisição ficará presa alí.

Veja o exemplo a seguir:

var express = require('express')
var app = express()

//middleware que loga a mensagem "LOGGED"
var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}
//define que o middleware myLogger deve ser utilizado
app.use(myLogger)

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000)

Neste exemplo temos o middleware “myLogger”. Este middleware apenas loga a mensagem “LOGGED” toda vez que uma requisição passa por ele. Como ele não apresenta uma resposta a requisição, ele usa a função next() para passar a responsabilidade para o próximo middleware.

Se quiser testar o exemplo, basta seguir o passo-a-passo do post anterior para criar uma aplicação utilizando Express.

Siga o passo-a-passo do post anterior para testar o exemplo, ok?
Ok?

Você deve ter reparado que, diferente da função “app.get()”, a função “myLogger” não tem nenhum endereço definido para o qual ela deva responder. Quando isso acontece, o endereço padrão definido pelo próprio Express é a ” / “. Logo, toda vez que uma requisição ao endereço ” / ” for feita, serão realizadas duas ações: a mensagem “LOGGED” será logada e a mensagem “Hello World” será respondida a quem fez a requisição.

Um fato importante sobre o Express é que os middlewares são executados sequencialmente, ou seja, de acordo com a ordem em que foram definidos no código. Devido a este comportamento que a função “myLogger” foi executada antes de “app.get()”.

E se trocarmos a ordem em que esses middlewares aparecem no código? Muda alguma coisa?

var express = require('express')
var app = express()

//middleware que loga a mensagem "LOGGED"
var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}

app.get('/', function (req, res) {
    res.send('Hello World!')
 })
  
//define que o middleware myLogger deve ser utilizado
app.use(myLogger)

app.listen(3000)

Bom, como os middlewares são executados sequencialmente e a função “app.get()” apresenta uma resposta a requisição, o middleware “myLogger” nunca será executado, pois o ciclo “request-response” terá sido encerrado.

Sensacional!
Sen-sa-ci-o-nal!

Bom, era isso que eu queria trazer para vocês neste artigo.

Qualquer dúvida, sugestão ou feedback, basta deixar um comentário!

Até o próxima!

Até a próxima!
Até!
Compartilhe:

Mais Um Blog

2 comentários em “Entendendo como funciona o Express e os Middlewares no Node.js

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Voltar ao topo