Middleware no Express js

NodeJS 4 de Ago de 2020

Middleware são funções que tem acesso ao objeto de solicitação (req), o objeto de resposta (res), e a próxima função de middleware no ciclo solicitação-resposta do aplicativo. A próxima função middleware é comumente denotada por uma variável chamada next.

A função middleware se conecta ao processo de roteamento, executando uma operação arbitrária em algum ponto da cadeia (dependendo do que queremos que ele faça).

É comumente usado para editar os objetos de solicitação ou resposta ou encerrar a solicitação antes que ela atinja o código do manipulador de rota.

O middleware é adicionado à pilha de execução da seguinte maneira:

app.use((req, res, next) => { /* */ })

Isso é semelhante à definição de uma rota, mas, além das instâncias dos objetos Request e Response, também temos uma referência à próxima função de middleware, que atribuímos à variável next.

Sempre chamamos next()no final de nossa função de middleware, para passar a execução para o próximo manipulador. Ou seja, a menos que desejemos finalizar prematuramente a resposta e enviá-la de volta ao cliente.

Você normalmente usa middleware pré-fabricado, na forma de npmpacotes. Uma grande lista dos disponíveis pode ser encontrada aqui .

Um exemplo é cookie-parser, que é usado para analisar cookies no objeto req.cookies. Você pode instalá-lo usando-o npm install cookie-parsere assim:

const express = require('express')
const app = express()
const cookieParser = require('cookie-parser')

app.get('/', (req, res) => res.send('Hello World!'))

// load the cookie-parsing middleware
app.use(cookieParser())

app.listen(3000, () => console.log('Server ready'))

Também podemos definir uma função de middleware para executar apenas para rotas específicas (não para todas), usando-a como o segundo parâmetro da definição de rota:

const myFirstMiddleware = (req, res, next) => {
  /* ... */
  next()
}

app.get('/', myFirstMiddleware, (req, res) => res.send('Hello World!'))

Se você precisar armazenar dados gerados em um middleware para transmiti-los às funções subsequentes do middleware ou ao manipulador de solicitações, poderá usar o Request.locals. Ele anexará esses dados à solicitação atual:

req.locals.author = 'Josias Pereira';
req.locals.site = 'josiaspereira.com.br';

Concluindo

Para concluir, podemos entender os Middlewares no Express como funções que interceptam solicitações à nossa api e fazem alguma coisa, podendo dar continuidade na requisição ou encerrando-a.

Josias Pereira

Programador full-stack sênior e apaixonado por ensinar. No tempo livre adora compartilhar conhecimentos e experiências das tecnologias de desenvolvimento back-end e front-end que mais gosta.

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.