Esta traducci贸n proporcionada por StrongLoop / IBM.

Este documento puede estar desfasado respecto a la documentaci贸n en ingl茅s. Para ver las 煤ltimas actualizaciones, consulte la documentaci贸n en ingl茅s.

Escritura de middleware para su uso en aplicaciones Express

Visi贸n general

Las funciones de middleware son funciones que tienen acceso al objeto de solicitud (req), al objeto de respuesta (res) y a la siguiente funci贸n de middleware en el ciclo de solicitud/respuestas de la aplicaci贸n. La siguiente funci贸n de middleware se denota normalmente con una variable denominada next.

Las funciones de middleware pueden realizar las siguientes tareas:

Si la funci贸n de middleware actual no finaliza el ciclo de solicitud/respuestas, debe invocar next() para pasar el control a la siguiente funci贸n de middleware. De lo contrario, la solicitud quedar谩 colgada.

El siguiente ejemplo muestra los elementos de una llamada a funci贸n de middleware:

M茅todo HTTP para el que se aplica la funci贸n de middleware.
V铆a de acceso (ruta) para la que se aplica la funci贸n de middleware.
La funci贸n de middleware.
Argumento de devoluci贸n de llamada a la funci贸n de middleware, denominado "next" por convenci贸n.
Argumento de respuesta HTTP a la funci贸n de middleware, denominado "res" por convenci贸n.
Argumento de solicitud HTTP a la funci贸n de middleware, denominado "req" por convenci贸n.

A continuaci贸n, se muestra un ejemplo de una aplicaci贸n Express simple, 鈥淗ello World鈥, para la que definir谩 dos funciones de middleware:


var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

Desarrollo

Este es un ejemplo simple de una funci贸n de middleware denominada 鈥渕yLogger鈥. Esta funci贸n simplemente imprime 鈥淟OGGED鈥 cuando una solicitud de la aplicaci贸n pasa por ella. La funci贸n de middleware se asigna a una variable denominada myLogger.


var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

Observe la llamada anterior a next(). La llamada a esta funci贸n invoca la siguiente funci贸n de middleware en la aplicaci贸n. La funci贸n next() no forma parte de la API de Express o Node.js, pero es el tercer argumento que se pasa a la funci贸n de middleware. La funci贸n next() puede tener cualquier nombre, pero por convenci贸n siempre se denomina 鈥渘ext鈥. Para evitar confusiones, utilice siempre esta convenci贸n.

Para cargar la funci贸n de middleware, llame a app.use(), especificando la funci贸n de middleware. Por ejemplo, el siguiente c贸digo carga la funci贸n de middleware myLogger antes de la ruta a la v铆a de acceso ra铆z (/).


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);

Cada vez que la aplicaci贸n recibe una solicitud, imprime el mensaje 鈥淟OGGED鈥 en el terminal.

El orden de carga del middleware es importante: las funciones de middleware que se cargan primero tambi茅n se ejecutan primero.

Si myLogger se carga despu茅s de la ruta a la v铆a de acceso ra铆z, la solicitud nunca la alcanza y la aplicaci贸n no imprime 鈥淟OGGED鈥, ya que el manejador de rutas de la v铆a de acceso ra铆z determina el ciclo de solicitud/respuestas.

La funci贸n de middleware myLogger simplemente imprime un mensaje y, a continuaci贸n, pasa la solicitud a la siguiente funci贸n de middleware de la pila llamando a la funci贸n next().

El siguiente ejemplo a帽ade una propiedad denominada requestTime al objeto de solicitud. Llamaremos a esta funci贸n de middleware 鈥渞equestTime鈥.


var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

La aplicaci贸n ahora utiliza la funci贸n de middleware requestTime. Asimismo, la funci贸n de devoluci贸n de llamada de la ruta de v铆a de acceso ra铆z utiliza la propiedad que la funci贸n de middleware a帽ade a req (el objeto de solicitud).


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);

Cuando realiza una solicitud a la ra铆z de la aplicaci贸n, la aplicaci贸n ahora muestra la indicaci贸n de fecha y hora de la solicitud en el navegador.

Como tiene acceso al objeto de solicitud, el objeto de respuesta, la siguiente funci贸n de middleware de la pila y toda la API de Node.js, las posibilidades con las funciones de middleware son ilimitadas.

Para obtener m谩s informaci贸n sobre el middleware de Express, consulte: Utilizaci贸n del middleware de Express.