O Express diz «Cannot GET» ou dá 404 em todas as rotas: as causas

A mensagem Cannot GET / é o Express a dizer: «recebi um pedido GET para este caminho e nenhuma rota nem ficheiro meu lhe responde». Boa notícia: a aplicação está a correr (se não estivesse, veria um 503), por isso o problema é de encaminhamento e não de servidor. A resposta curta: falta uma rota para esse caminho, ou a pasta de ficheiros estáticos aponta para o sítio errado, ou o que está a abrir não é a sua aplicação.

Descobrir qual é, por ordem

1 Confirme que é o seu Express a responder. Acrescente uma rota de teste, reinicie a aplicação e abra /ping:app.get("/ping", (req, res) => res.send("ok"));Se responder «ok», o servidor está bem e o defeito está nas suas rotas. Se não, está a ver outra coisa: um index.html na pasta pública que ganha ao endereço, ou outra aplicação. Confira o endereço no ecrã do «Setup Node.js App».
2 Veja o que chega. Ponha isto antes de todas as rotas e olhe para o registo (onde ler os registos):app.use((req, res, next) => {
  console.log(req.method, req.url);
  next();
});
3 Compare com as rotas. O método, o caminho completo e o prefixo têm de coincidir com o que está registado.
4 Reinicie. Uma aplicação Node mantém o código antigo em memória até ser reiniciada: use o botão do ecrã da aplicação.

As causas mais comuns

Causa Como se reconhece Solução
Não há rota para / Só / falha; /ping funciona. Defina app.get("/", ...) ou sirva uma pasta com um index.html através do express.static.
Pasta estática errada express.static("public") funciona no seu computador e não aqui. O caminho relativo depende de onde o Node foi arrancado. Use path.join(__dirname, "public").
Prefixo da rota O router está montado em /api e abre-se /users. Abra /api/users, ou monte o router no prefixo certo.
Método diferente A mensagem diz Cannot POST /x. A rota está definida com get e o formulário envia post, ou ao contrário.
Ordem das rotas Uma rota geral (*) ou um tratador de 404 está antes das outras. Ponha-os no fim: o Express usa a primeira rota que coincide.
Maiúsculas nos ficheiros O ficheiro existe, mas o endereço pede outro nome. O Express ignora as maiúsculas nas rotas por omissão, mas os nomes de ficheiros numa pasta estática não.
Código antigo em memória A correcção está feita e o erro não muda. Reinicie a aplicação.
Não «resolva» fixando ou abrindo uma porta. Na hospedagem partilhada a aplicação é servida através do domínio, pelo Passenger, e não por um número de porta. Mantenha process.env.PORT || 3000 no listen, que funciona aqui e no seu computador. Se a aplicação nem arranca, o caso é outro: erro 503 numa aplicação Node.js.
Faça um 404 que ajude. No fim de todas as rotas, um tratador que devolva o método e o caminho recebidos poupa muito tempo: app.use((req, res) => res.status(404).send(req.method + " " + req.url + " not found")). Veja o resultado e compare com o que esperava.

A rota existe, o registo mostra o pedido e continua a falhar? Envie-nos o domínio e as últimas linhas do registo.

Abrir um pedido de suporte

VEJA TAMBÉM

Pôr uma aplicação Node.js a correr

Aplicação Node.js no cPanel com erro 503: as causas habituais

Onde vão parar o console.log e o print, e como ler os registos da aplicação

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 321,75 MT/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?