É isso mesmo. No curso de MEAN, a aplicação Angular que é fornecida faz uso do #
. Qual o motivo disso, você deve estar se perguntando se no curso de Angular aprendemos a criar rotas no client sem o #
.
O problema é que se o Aluno cai de paraquedas no curso de MEAN sem ter feito o de Angular (pré-requisito) ele não saberá diferenciar uma rota do client de uma API do servidor. E mesmo quem saiba a diferença, voltar com o #
ajuda ao aluno a separar bem as duas coisas. POr fim, outro motivo é a compatibilidade de todos os navegadores. Quando o navegador não suporta o HTML5Mode, ele volta a usar a #
. Se o aluno que cai de paraquedas no MEAN vê uma explicação sem o #
e depois aparece o #
em seu pobre navegador ele ficaria confuso. Foi só por causa disso.
No seu caso, quando você digita localhost:3000/login
não vai funcionar, ele vai achar que é uma rota do servidor, porque ele está esperando a rota como localhost:3000/#/login
. Agora entendo porque você acessando rota de login direto estava dando não autorizado.
Contudo, se o seu interceptador estivesse funcionando, qualquer parcial que você acessasse que fizesse uso de Ajax o redirecionadia para login
.
Então, quando não logado, se você acessar localhost:3000
ele te redireciona para localhost:3000/#/login
. Você pode querer usar o HTML5Mode, mas tem que se garantir que não vai confundir as coisas durante o processo.
Quando usamos HTML5Mode, o servidor precisa sempre retornar para qualquer rota index.html
. Como assim? Se você acessa o endereço localhost:3000/fotos
ele retorna uma lista de fotos, certo? Mas se você acessar uma URL que não existe? Sempre tem que ser devolvia o index.html
.
Você pode ver no projeto do curso de Angular lá no arquivo de configuração do express como faz para retornar sempre a página index.html
para rotas inexistentes.
Mas eu explico tudo isso no curso de Angular, sobre o # e como não usar. Aliás, reforço isso nos exercícios.
Então, o que você precisa fazer é ter certeza absoluta se o seu interceptador está sendo chamado (coloca um console.log em todas as chamadas) e olhe no terminal se ele está imprimindo. Depois, voltar com o #
e verificar se tudo funciona. Tudo funcionando, dai você pode tentar voltar para o HTML5Mode Aliás, muitas empresas como MS, Twitter, e Google ainda usam o # como padrão.
Espero ter esclarecido parte do problema aqui.