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 npm
pacotes. 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-parser
e 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.