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:
- O JavaScript da página tentando criar a conexão Socket.IO
- 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.