- Middleware a nivel de aplicacion
- Middleware de nivel enrutador
- Middleware de gestión de errores
- Built-in middleware
- Middleware de terceros
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.
Este ejemplo muestra una función de
middleware sin ruta de montaje. 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(); });
Este ejemplo muestra una función de middleware montado en el /user/:id camino. 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(); });
Este ejemplo
muestra una ruta y su función de controlador (sistema de middleware). La función maneja peticiones GET a la /user/:id camino.
app.get('/user/:id', function (req,
res, next) { res.send('USER'); });
Aquí está un
ejemplo de la carga de una serie de funciones de middleware en un punto de
montaje, con una ruta de montaje. 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(); });
manejadores de ruta le permiten
definir múltiples rutas para una ruta. El ejemplo siguiente se definen dos rutas para peticiones GET a la /user/:id camino. La segunda ruta no causará ningún problema, pero nunca será
llamado debido a que la primera ruta finaliza el ciclo de solicitud-respuesta.
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); });
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.
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'); });
middleware de nivel enrutador
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();
De carga a nivel de middleware enrutador mediante el uso de la router.use() y router.METHOD() funciones.
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);
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
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));
app.use(express.static('public'));
app.use(express.static('uploads')); app.use(express.static('files'));
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());