Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Single Page APP - erro no refresh quando não está no "/"

Olá, estou fazendo uma SPA própria baseada no curso aqui da Alura. As rotas estão funcionando, mas há um problema. Quando eu, por exemplo, aperto F5 numa url que não seja a "/" aparece esse erro para mim, por exemplo :

Como devo resolver?

Cannot GET /cadastro

Outra coisa que não conseguir resolver foi fazer a captura dos pathname na url de outra forma... Tentei dessa forma abaixo, mas no /editar não conseguia pegar os parâmetros para trazer os values, então tive que usar o roteamento do curso.

Há outras formas mais fáceis de se trabalhar com as urls sem precisar usar o pushState?

function init(){

    window.addEventListener('hashchange',()=>{
        container.innerHTML="";


        switch(window.location.hash){
                         case "":
               container.appendChild(home());                
                break;

             case "#cadastro":
                 container.appendChild(cadastro());                
                 break;

            case '#edita?id=3':
                container.appendChild(edita());                
                break;
             default:
                 container.appendChild(home());
                break;
         }

   })
 }
 window.addEventListener("load",()=>{
   container.appendChild(home());
    init();
})

Segue o git: https://github.com/Raul-Pinheiro/projetoPessoal-portalLivrosSPA

5 respostas
solução!

Fala ai Raul, tudo bem? Esse problema é porque o gerenciamento de rotas está no cliente, ou seja, seu servidor apenas conhece a rota raiz (/).

Por isso ele dá esse erro: Cannot GET /cadastro, pois, ele não conhece a rota /cadastro.

Nesse caso, você precisa implementar um wildcard para sempre retornar o index.html independe do erro ou rota, algo assim: /* => index.html.

Como implementar esse wildcard vai mudar muito depende do que você está utilizando como servidor, exemplo: Express, NGINX, Tomcat, Apache, etc...

Espero ter ajudado.

Nesse projeto estou usando o Webpack server, tem algo na documentação sobre wildcard? Desconheço o termo.

Tenho outra SPA em andamento que está usando o live server

Fala Raul, nesse caso o Webpack server deveria saber lidar com isso e retornar a aplicação independente da rota.

Espero ter ajudado.

Fui pesquiser e o webpack tem uma mlib chamada wildcard-server-webpack-plugin

https://www.npmjs.com/package/wildcard-server-webpack-plugin

Boa Raul, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.