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.
