Esta tradução fornecida pelo StrongLoop / IBM.
Este documento pode estar desatualizado em relação à documentação em Inglês. Para obter as atualizações mais recentes, consulte a documentação em Inglês.Funções de 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
.
Funções de middleware podem executar as seguintes tarefas:
Se a atual função de middleware não terminar o ciclo de
solicitação-resposta, ela precisa chamar next()
para passar o controle para a próxima função de middleware. Caso
contrário, a solicitação ficará suspensa.
O exemplo a seguir mostra os elementos de uma chamada de função de middleware:
O método HTTP para o qual a função de middleware é aplicada.
Caminho (rota) para o qual a função de middleware é aplicada.
A função de middleware.
Argumento de retorno de chamada para a função de middleware, chamado de "next" por convenção.
Argumento de resposta HTTP para a função de middleware, chamado de "res" por convenção.
Argumento de solicitação HTTP para a função de middleware, chamado de "req" por convenção.
|
Aqui está um exemplo de um simples aplicativo “Hello World” do Express, para o qual serão definidas duas funções de middleware:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
Aqui está um exemplo simples de uma função de middleware chamada “myLogger”. Esta
função apenas imprime “LOGGED” quando uma solicitação para o aplicativo passa por ela. A
função de middleware é designada para uma variável chamada myLogger
.
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
Observe a chamada acima para next()
. A chamada
desta função chama a próxima função de middleware no aplicativo.
A função next()
não faz parte do Node.js
ou da API Express, mas é o terceiro argumento que é passado para a
função de middleware. A função next()
poderia ter
qualquer nome, mas por convenção ela é sempre chamada de “next”. Para
evitar confusão, sempre use esta convenção.
Para carregar a função de middleware, chame app.use()
, especificando a função de middleware.
Por exemplo, o código a seguir carrega a função de middleware do myLogger
antes da rota para o caminho raiz (/).
var express = require('express');
var app = express();
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
Sempre que o aplicativo recebe uma chamada, ele imprime a mensagem “LOGGED” no terminal.
A ordem de carregamento do middleware é importante: funções de middleware que são carregadas primeiro também são executadas primeiro.
Se myLogger
é carregada após a rota para o
caminho raiz, a chamada nunca chegará a ela e o aplicativo não
imprimirá “LOGGED”, pois o manipulador de rota do caminho raiz
encerra o ciclo de solicitação-resposta.
A função de middleware myLogger
simplesmente imprime uma mensagem, e em seguida passa a solicitação para a próxima
função de middleware na pilha chamando a função next()
.
O próximo exemplo inclui uma propriedade chamada
requestTime
ao objeto da solicitação. Iremos
chamar esta função de middleware de “requestTime”.
var requestTime = function (req, res, next) {
req.requestTime = Date.now();
next();
};
O aplicativo agora usa a função de middleware requestTime
. Além
disso, a função de retorno de chamada do caminho raiz usa a
propriedade que a função de middleware inclui no
req
(o objeto da solicitação).
var express = require('express');
var app = express();
var requestTime = function (req, res, next) {
req.requestTime = Date.now();
next();
};
app.use(requestTime);
app.get('/', function (req, res) {
var responseText = 'Hello World!
';
responseText += 'Requested at: ' + req.requestTime + '';
res.send(responseText);
});
app.listen(3000);
Ao fazer uma solicitação para a raiz do aplicativo, o aplicativo agora exibe o registro de data e hora da sua solicitação no navegador.
Como você tem acesso ao objeto da solicitação, ao objeto de resposta, à próxima função de middleware na pilha, e à API completa do Node.js, as possibilidades com as funções de middleware são ilimitadas.
Para obter mais informações sobre middlewares no Express, consulte: Usando middlewares no Express.