Antes de perguntar app.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 usando next()
ou fará com que ele não seja mais chamado. Isso significa que a ordem na qual eu faço minhas chamadas de middleware é importante, porque alguns middlewares dependem de outros middlewares, e alguns middlewares próximos ao final podem nem ser chamados.
Hoje eu estava trabalhando no meu aplicativo e meu servidor estava sendo executado em segundo plano. Eu queria fazer algumas alterações, atualizar minha página e ver as alterações imediatamente. Especificamente, eu estava fazendo alterações no meu layout. Não consegui fazê-lo funcionar, então procurei a Stack Overflow e encontrei esta pergunta . Diz para garantir que express.static()
está embaixo require('stylus')
. Mas quando eu estava olhando para o código do OP, vi que ele recebeu sua app.router
ligação no final de suas chamadas de middleware e tentei descobrir por que isso acontecia.
Quando criei meu aplicativo Express.js (versão 3.0.0rc4), usei o comando express app --sessions --css stylus
e, no meu arquivo app.js, o código veio configurado com app.router
as chamadas acima express.static()
e acima require('stylus')
. Então parece que, se já vem configurado dessa maneira, deve permanecer assim.
Depois de reorganizar meu código para que eu pudesse ver minhas alterações no Stylus, fica 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, decidi que o primeiro passo seria descobrir por que é importante ter app.router
no meu código. Então, comentei, iniciei meu aplicativo e naveguei para /
. Ele exibiu minha página de índice muito bem. Hmm, talvez tenha funcionado porque eu estava exportando o roteamento do meu arquivo de rotas (routes.index). Então, em seguida, naveguei /test
e exibi Teste na tela. Haha, ok, eu não tenho ideia do que app.router
faz. Esteja ou não incluído no meu código, meu roteamento está correto. Então, definitivamente estou perdendo alguma coisa.
Então aqui está a minha pergunta:
Alguém poderia explicar o que app.router
faz, a importância e onde devo colocá-lo nas minhas chamadas de middleware? Também seria bom se eu tivesse uma breve explicação sobre express.static()
. Pelo que sei, express.static()
há um cache de minhas informações e, se o aplicativo não conseguir encontrar a página solicitada, ele verificará o cache para verificar se existe.