Node.js / Express.js - Como o app.router funciona?

Antes de perguntar sobreapp.router Acho que devo explicar pelo menos o que acho que acontece quando se trabalha com middleware. Para usar o middleware, a função a ser usada éapp.use(). Quando o middleware estiver sendo executado, ele chamará o próximo middleware usandonext() ou fazer com que não seja mais chamado o middleware. Isso significa que a ordem na qual eu coloco minhas chamadas de middleware é importante, porque alguns middlewares dependem de outro middleware, e alguns middlewares perto do final podem nem ser chamados.

Hoje eu estava trabalhando no meu aplicativo e tinha meu servidor rodando em segundo plano. Eu queria fazer algumas alterações e atualizar minha página e ver as alterações imediatamente. Especificamente, eu estava fazendo alterações no meu layout. Eu não consegui fazê-lo funcionar, então eu procurei o Stack Overflow pela resposta e encontreiessa questão. Diz para se certificar de queexpress.static() está abaixorequire('stylus'). Mas quando eu estava olhando para o código do OP, vi que ele tinhaapp.router Ligue para o final de suas chamadas de middleware, e tentei descobrir o porquê disso.

Quando fiz meu aplicativo Express.js (versão 3.0.0rc4), usei o comandoexpress app --sessions --css stylus e no meu arquivo app.js o código veio configurado com o meuapp.router acima tanto doexpress.static() erequire('stylus') chamadas. Então, parece que, se já vem configurado dessa maneira, então deve ficar desse jeito.

Depois de reorganizar meu código para ver minhas alterações na Stylus, ficou assim:

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

Então eu decidi que o primeiro passo seria descobrir por que é importante terapp.router no meu código. Então eu comentei, iniciei meu aplicativo e naveguei para/. Ele exibiu minha página de índice bem. Hmm, talvez funcionou porque eu estava exportando o roteamento do meu arquivo de rotas (routes.index). Então, em seguida, naveguei para/test e exibiu Teste na tela. Haha, OK, eu não tenho ideia do queapp.router faz. Se está incluído no meu código ou não, meu roteamento está bem. Então estou definitivamente perdendo alguma coisa.

Então aqui está a minha pergunta:

Alguém poderia por favor explicar o queapp.router a importância disso e onde devo colocá-lo em minhas chamadas de middleware? Também seria bom se eu tivesse uma breve explicação sobreexpress.static(). Tanto quanto eu posso dizer,express.static() é um cache de minhas informações, e se o aplicativo não puder encontrar a página solicitada, ele verificará o cache para ver se ele existe.

questionAnswers(3)

yourAnswerToTheQuestion