Node.js / Express.js - ¿Cómo funciona app.router?

Antes de preguntar sobreapp.router Creo que debería explicar al menos lo que creo que sucede cuando se trabaja con middleware. Para usar middleware, la función a usar esapp.use(). Cuando se esté ejecutando el middleware, llamará al siguiente middleware usandonext() O haz que no se llame más middleware. Eso significa que el orden en el que realizo mis llamadas de middleware es importante, porque algunos middleware dependen de otros middleware, y es posible que algunos middleware cercanos al final ni siquiera se llamen.

Hoy estaba trabajando en mi aplicación y tenía mi servidor funcionando en segundo plano. Quería hacer algunos cambios y actualizar mi página y ver los cambios inmediatamente. Específicamente, estaba haciendo cambios en mi diseño. No pude hacer que funcionara, así que busqué la respuesta y encontré Stack Overflow.esta pregunta. Dice para asegurarse de queexpress.static() está debajorequire('stylus'). Pero cuando estaba mirando el código de ese OP, vi que tenía suapp.router llame al final de sus llamadas de middleware, y traté de averiguar por qué fue eso.

Cuando hice mi aplicación Express.js (versión 3.0.0rc4), usé el comandoexpress app --sessions --css stylus y en mi archivo app.js, el código vino con mi configuraciónapp.router por encima de ambosexpress.static() yrequire('stylus') llamadas Así que parece que, si ya viene configurado de esa manera, debería seguir siéndolo.

Después de reorganizar mi código para que pudiera ver los cambios de mi Stylus, se ve así:

app.configure(function(){
  //app.set() calls
  //app.use() calls
  //...
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(__dirname + '/public', {maxAge: 31557600000}));
});

app.get('/', routes.index);

app.get('/test', function(req, res){
  res.send('Test');
});

Así que decidí que el primer paso sería averiguar por qué es importante tener inclusoapp.router en mi codigo Así que lo comenté, comencé mi aplicación y navegué a/. Se muestra mi página de índice muy bien. Hmm, tal vez funcionó porque estaba exportando el enrutamiento de mi archivo de rutas (route.index). Así que a continuación navegué a/test y se muestra Prueba en la pantalla. Jaja, está bien, no tengo idea de queapp.router hace. Ya sea que esté incluido en mi código o no, mi enrutamiento está bien. Así que definitivamente me falta algo.

Ésta es mi pregunta:

¿Podría alguien explicar qué?app.router ¿Qué importancia tiene, y dónde debería colocarlo en mis llamadas de middleware? También sería bueno si tuviera una breve explicación sobreexpress.static(). Por lo que yo puedo decir,express.static() es un caché de mi información, y si la aplicación no puede encontrar la página solicitada, revisará el caché para ver si existe.

Respuestas a la pregunta(3)

Su respuesta a la pregunta