Tipos de middleware

Una aplicación express puede utilizar los siguientes tipos de middleware:




- Middleware a nivel de aplicacion


- Middleware de nivel enrutador


- Middleware de gestión de errores


- Built-in middleware


- Middleware de terceros



middleware de nivel de aplicación
Bind application-level middleware to an instance of the app object by using the app.use() and app.METHOD() functions, where METHOD is the HTTP method of the request that the middleware function handles (such as GET, PUT, or POST) in lowercase. Enlazar a nivel de aplicación middleware para una instancia del objeto de aplicación mediante el uso de la app.use() y app.METHOD() funciones, donde METHOD es el método HTTP de la petición de que los mangos de función middleware (como GET, PUT, o POST) en minúsculas.
This example shows a middleware function with no mount path. Este ejemplo muestra una función de middleware sin ruta de montaje. The function is executed every time the app receives a request. La función se ejecuta cada vez que la aplicación recibe una solicitud.
 var app = express(); app.use(function (req, res, next) { console.log('Time:', Date.now()); next(); });
This example shows a middleware function mounted on the /user/:id path. Este ejemplo muestra una función de middleware montado en el /user/:id camino. The function is executed for any type of HTTP request on the /user/:id path. La función se ejecuta para cualquier tipo de petición HTTP en el /user/:id camino.
 app.use('/user/:id', function (req, res, next) { console.log('Request Type:', req.method); next(); });
This example shows a route and its handler function (middleware system). Este ejemplo muestra una ruta y su función de controlador (sistema de middleware). The function handles GET requests to the /user/:id path. La función maneja peticiones GET a la /user/:id camino.
 app.get('/user/:id', function (req, res, next) { res.send('USER'); });
Here is an example of loading a series of middleware functions at a mount point, with a mount path. Aquí está un ejemplo de la carga de una serie de funciones de middleware en un punto de montaje, con una ruta de montaje. It illustrates a middleware sub-stack that prints request info for any type of HTTP request to the /user/:id path. Ilustra un middleware subpila que las impresiones petición de información para cualquier tipo de petición HTTP al /user/:id camino.
 app.use('/user/:id', function(req, res, next) { console.log('Request URL:', req.originalUrl); next(); }, function (req, res, next) { console.log('Request Type:', req.method); next(); });
Route handlers enable you to define multiple routes for a path. manejadores de ruta le permiten definir múltiples rutas para una ruta. The example below defines two routes for GET requests to the /user/:id path. El ejemplo siguiente se definen dos rutas para peticiones GET a la /user/:id camino. The second route will not cause any problems, but it will never get called because the first route ends the request-response cycle. La segunda ruta no causará ningún problema, pero nunca será llamado debido a que la primera ruta finaliza el ciclo de solicitud-respuesta.
This example shows a middleware sub-stack that handles GET requests to the /user/:id path. Este ejemplo muestra un sub-pila de middleware que maneja peticiones GET a la /user/:id camino.
 app.get('/user/:id', function (req, res, next) { console.log('ID:', req.params.id); next(); }, function (req, res, next) { res.send('User Info'); }); // handler for the /user/:id path, which prints the user ID app.get('/user/:id', function (req, res, next) { res.end(req.params.id); });
To skip the rest of the middleware functions from a router middleware stack, call next('route') to pass control to the next route. NOTE : next('route') will work only in middleware functions that were loaded by using the app.METHOD() or router.METHOD() functions. Para omitir el resto de las funciones de middleware de una pila de middleware router, llame al next('route') para pasar el control a la siguiente ruta. NOTA: next('route') sólo funcionará en funciones de middleware que se cargaron mediante el uso de la app.METHOD() o router.METHOD() funciones.
This example shows a middleware sub-stack that handles GET requests to the /user/:id path. Este ejemplo muestra un sub-pila de middleware que maneja peticiones GET a la /user/:id camino.
 app.get('/user/:id', function (req, res, next) { // if the user ID is 0, skip to the next route if (req.params.id == 0) next('route'); // otherwise pass the control to the next middleware function in this stack else next(); // }, function (req, res, next) { // render a regular page res.render('regular'); }); // handler for the /user/:id path, which renders a special page app.get('/user/:id', function (req, res, next) { res.render('special'); });
Router-level middleware middleware de nivel enrutador
Router-level middleware works in the same way as application-level middleware, except it is bound to an instance of express.Router() . Middleware de nivel enrutador funciona de la misma manera como middleware de nivel de aplicación, excepto que se une a una instancia de express.Router() .
 var router = express.Router();
Load router-level middleware by using the router.use() and router.METHOD() functions. De carga a nivel de middleware enrutador mediante el uso de la router.use() y router.METHOD() funciones.
The following example code replicates the middleware system that is shown above for application-level middleware, by using router-level middleware: El siguiente código de ejemplo se replica el sistema de middleware que se muestra más arriba para el middleware de nivel de aplicación, mediante el uso de middleware de nivel enrutador:
 var app = express(); var router = express.Router(); // a middleware function with no mount path. This code is executed for every request to the router router.use(function (req, res, next) { console.log('Time:', Date.now()); next(); }); // a middleware sub-stack shows request info for any type of HTTP request to the /user/:id path router.use('/user/:id', function(req, res, next) { console.log('Request URL:', req.originalUrl); next(); }, function (req, res, next) { console.log('Request Type:', req.method); next(); }); // a middleware sub-stack that handles GET requests to the /user/:id path router.get('/user/:id', function (req, res, next) { // if the user ID is 0, skip to the next router if (req.params.id == 0) next('route'); // otherwise pass control to the next middleware function in this stack else next(); // }, function (req, res, next) { // render a regular page res.render('regular'); }); // handler for the /user/:id path, which renders a special page router.get('/user/:id', function (req, res, next) { console.log(req.params.id); res.render('special'); }); // mount the router on the app app.use('/', router);
Error-handling middleware Middleware de gestión de errores
Middleware de gestión de errores siempre se toma cuatro argumentos. Debe proporcionar cuatro argumentos para identificarlo como una función de middleware de gestión de errores. Incluso si no es necesario utilizar el next objeto, debe especificarlo para mantener la firma. De lo contrario, el next objeto se interpreta como middleware regular y dejará de controlar los errores.

Definir las funciones de middleware de gestión de errores de la misma manera como otras funciones de middleware, excepto con cuatro argumentos en lugar de tres, en concreto con la firma (err, req, res, next) ):
 app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); });

Built-in middleware Built-in middleware



La firma de la función es:
 express.static(root, [options])


La root argumento especifica el directorio raíz desde donde servir activos estáticos.
He aquí un ejemplo del uso del express.static función de middleware con un elaborado Opciones de objeto:


 var options = { dotfiles: 'ignore', etag: false, extensions: ['htm', 'html'], index: false, maxAge: '1d', redirect: false, setHeaders: function (res, path, stat) { res.set('x-timestamp', Date.now()); } } app.use(express.static('public', options));
Usted puede tener más de un directorio estática por aplicación:
 app.use(express.static('public')); app.use(express.static('uploads')); app.use(express.static('files'));


Third-party middleware middleware de terceros


Utilizar el middleware de terceros para agregar funcionalidad a Express aplicaciones. 
 El siguiente ejemplo ilustra cómo instalar y cargar la cookie-análisis de la función de middleware cookie-parser .
 $ npm install cookie-parser
 var express = require('express'); var app = express(); var cookieParser = require('cookie-parser'); // load the cookie-parsing middleware app.use(cookieParser());