Middleware no Express js

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.