route node another node.js express middleware

node.js - node - Encadenamiento de múltiples piezas de middleware para una ruta específica en ExpressJS



express use (2)

Considere el siguiente ejemplo:

var middleware = { requireAuthentication: function(req, res, next) { console.log(''private route list!''); next(); }, logger: function(req, res, next) { console.log(''Original request hit : ''+req.originalUrl); next(); } }

Ahora puedes agregar middleware múltiple usando el siguiente código:

app.get(''/'', [middleware.requireAuthentication, middleware.logger], function(req, res) { res.send(''Hello!''); });

Por lo tanto, desde el fragmento de código anterior, puedes ver que "requireAuthentication" y "logger" son dos middlewares diferentes agregados.

Solo quiero verificar algo, pero no he podido encontrar nada en los documentos Express o en línea al respecto (aunque sé que es una característica).

Simplemente podría probar esto, pero realmente no tengo una buena plantilla y me gustaría saber de la comunidad.

Si defino una ruta en expreso como tal:

app.get(''/'', function (req, res) { res.send(''GET request to homepage''); });

También puedo definir un middleware y cargarlo directamente, como

middleware = function(req, res){ res.send(''GET request to homepage''); }); app.get(''/'', middleware)

Sin embargo, también puedo encadenar al menos una de estas rutas para ejecutar middleware adicional, como la autenticación, como tal:

app.get(''/'', middleware, function (req, res) { res.send(''GET request to homepage''); });

¿Son estos infinitamente chainable? ¿Podría pegar 10 funciones de middleware en una ruta determinada si quisiera? Quiero ver los parámetros que puede aceptar app.get pero, como he mencionado, no puedo encontrarlo en los documentos.


No dice "infinitamente", pero sí dice que puede agregar múltiples funciones de middleware (llamadas "devoluciones de llamada" en la documentación) here :

router.METHOD (ruta, [devolución de llamada, ...] devolución de llamada)

...

Puede proporcionar múltiples devoluciones de llamada , y todas se tratan por igual, y se comportan como middleware, excepto que estas devoluciones de llamada pueden invocarse a continuación ("ruta") para omitir las devoluciones de llamada de la ruta restante. Puede usar este mecanismo para realizar condiciones previas en una ruta y luego pasar el control a las rutas subsiguientes cuando no haya ninguna razón para continuar con la ruta coincidente.

Como puede ver, no hay distinción entre una función de middleware y la función que comúnmente maneja la solicitud (la que generalmente es la última función agregada a la lista).

Tener 10 no debería ser un problema (si realmente lo necesitas).