2
respostas

Não aparece o alert

No vídeo do professor ele se desloga e vai para a página principal e aparece o alert e logo em seguida ele é redirecionado para a página de login, mas comigo quando eu me deslogo e coloco pra ir na página principal, não chega na página, vai direto pra página de login e não aparece o alert. Testei comentar o "href" para não redirecionar e daí consigo entrar na página principal e aparece o alert, mas só aparece se eu recarregar a página, já no professor apareceu apenas entrando na página. Conseguem ver o vídeo ou preciso colocar o link aq? Minuto: 7:07

socket.on("connect_error", (erro) => {
  alert(erro);
  window.location.href = "/login/index.html";
});
2 respostas

Bom dia

O código está correto. O comportamento diferente em relação ao vídeo acontece por causa da ordem em que as coisas acontecem no navegador, não porque você implementou errado.

Vamos por partes.

Quando você faz logout e tenta acessar a página principal, duas coisas estão disputando entre si:

  1. O JavaScript da página tentando criar a conexão Socket.IO
  2. Alguma lógica de redirecionamento (seja no próprio front, seja por fluxo da aplicação) que manda direto para /login

O ponto-chave é este:
o alert só aparece se o JavaScript da página principal for executado

No seu caso, quando você acessa a página principal deslogado, o navegador já redireciona para o login antes mesmo de o Socket.IO conseguir disparar o connect_error.
Resultado:
– O socket nem chega a tentar conectar
– O evento connect_error não é ouvido
– O alert não aparece

Isso explica perfeitamente o que você observou.

Por que no vídeo do professor aparece o alert?

Muito provavelmente, no projeto dele:

– A página principal carrega primeiro
– O socket tenta conectar
– O middleware bloqueia
– O connect_error dispara
– O alert aparece
Só depois ocorre o redirecionamento para o login

No seu projeto, o redirecionamento acontece antes do socket falhar.

Isso fica evidente quando você comentou o href:
✔A página carrega
✔O socket tenta conectar
✔ O erro acontece
✔O alert aparece

Ou seja: o alert funciona, mas estava sendo “cortado” pelo redirecionamento precoce.

sobre o detalhe do “só aparece ao recarregar”

Quando você recarrega manualmente a página principal já sem o token:

– O JS da página é executado
– O socket tenta conectar imediatamente
– O erro é emitido
– O alert aparece

Na navegação automática (logout → página principal), isso não acontece porque a página nem chega a executar o JS.

Abçs.

Mas se eu coloquei o "alert" antes do redirecionamento, ele não deveria aparecer? É pq não dá tempo do JS da página carregar? Tem haver com algum processo assíncrono? Tem como forçar entrar na página e aparecer o "alert" e depois ser redirecionado?