Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
13
respostas

Websocket

app.js

var app = require('./config/express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.set('io',io);

var porta = process.env.PORT || 3000;
var server = http.listen(porta, function () {

    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s', host, port);

});

index.ejs

<script src="/socket.io/socket.io.js" charset="utf-8"></script>
<script>
    var socket = io();
    socket.on('novaPromocao', function (data) {
        //document.location.href= "/produtos/"+data.livro.id+"?promocao="+data.mensagem;
      alert(data.livro);
    });
</script>

promocoes.js

module.exports = function(app){
  app.get('/promocoes/form', function(req, res){
    var connection = app.infra.connectionFactory();
    var listaPromocoes = new app.infra.produtosDAO(connection);

    listaPromocoes.lista (function(errs, result){
      res.render('promocoes/form', {lista: result});
    });
  });

  app.post('/promocoes', function(req, res){
    var promocoes = req.body;
  app.get('io').emit('novaPromocao', promocoes);
    res.redirect('promocoes/form');
  })
}
13 respostas

Opa, o que acontece?

Não esta carregando o módulo socket.io, observei no dev tools e não vem nada. Já tentei mudar o caminho da pasta para /node_modules/socket.io/socket.io.js e mesmo assim não surte efeito.

Conferi também com os códigos que estão no github e não vi diferenças

Yuri, perdão pela demora. Você pode subir seu código no github e apontar o link aqui? É algum detalhe que vai ser mais fácil de ver executando.

Github

Opa, baixei seu código e funcionou perfeitamente... Rodei na versão 6.9.1 do node, parece a mais recente tb, né? O socket.io funcionou tranquilamente... A única diferença é que usei a minha pasta node_modules. Tenta baixar a minha pasta https://dl.dropboxusercontent.com/u/6015854/node_modules.zip e faz um teste? Pode ter sido alguma versão mais nova que bugou...

Erro ainda persiste, o socket não é carregado. Será que não é algo na hora em dou o require ? ou quando instancio ele no form.ejs ?

No seu devtools do chrome ou outro navegador, aparece o que na aba network quando vc busca por socket.io ? Ainda tem uma aba chamada ws, dentro da aba network.. dá para vc perceber se o web socket foi carregado...

Então, simplesmente nada em ambas abas. Isso é o que me intriga, como é que ele nem sequer esta carregando

consegue baixar o meu e rodar => https://github.com/asouza/casadocodigo-javascript ?

Realmente não sei o que pode ser :(.

Olá, Yuri!

Também baixei seu código para avaliar e não encontrei nenhum problema. O exemplo de websocket executou normalmente. Conseguiu resolver o problema? Se sim, sugiro relatar para que outras pessoas aproveitem a sua solução.

solução!

Estava tomando o mesmo erro que o seu.

Tive que fazer a seguinte adaptação na minha app.js de acordo com a documentação do socket.io:

var app = require('./config/express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

app.set('io', io);
server.listen(3000, function(){
    console.log("Servidor rodando");
});

Atente para o "server.listen(3000, ..."

Feito isso funcionou!

http://socket.io/docs/

Me desculpem, eu já havia resolvido o erro de outra maneira olhando a doc do socket. Mesmo assim muito obrigado gjunior o/

Me desculpem, eu já havia resolvido o erro de outra maneira olhando a doc do socket. Mesmo assim muito obrigado gjunior o/