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

Erro ao importar Socket IO

Ao realizar o import do socket.io eu recebo o seguinte erro:

GET http://localhost:3000/socket.io/socket.io.js 
(index):333 
Uncaught ReferenceError: io is not defined
    at (index):333

Alguém poderia me ajudar dizendo onde posso estar errando? Minha configuração encontra-se assim:

app.js

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

app.listen(3000, function() {
    console.log('Aplicação NodeJS e Express Rodando');
});

index.ejs

<html ng-app="cdcApp">
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
    <link rel="icon"
          href="//cdn.shopify.com/s/files/1/0155/7645/t/177/assets/favicon.ico?11981592617154272979"
          type="image/ico"/>
    <link href="https://plus.googlecom/108540024862647200608"
          rel="publisher"/>
    <title>Livros de Java, SOA, Android, iPhone, Ruby on Rails e
        muito mais - Casa do Código</title>
    <link href="/css/site/cssbase-min.css"
          rel="stylesheet" type="text/css" media="all"/>
    <link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700'
          rel='stylesheet'/>
    <link
            href="/css/site/fonts.css"
            rel="stylesheet" type="text/css" media="all"/>
    <link
            href="/css/site/fontello-ie7.css"
            rel="stylesheet" type="text/css" media="all"/>
    <link
            href="/css/site/fontello-embedded.css"
            rel="stylesheet" type="text/css" media="all"/>
    <link
            href="/css/site/fontello.css"
            rel="stylesheet" type="text/css" media="all"/>

    <link
            href="/css/site/style.css"
            rel="stylesheet" type="text/css" media="all"/>

    <link
            href="/css/site/layout-colors.css"
            rel="stylesheet" type="text/css" media="all"/>
    <link
            href="/css/site/responsive-style.css"
            rel="stylesheet" type="text/css" media="all"/>
    <link rel="canonical" href="http://www.casadocodigo.com.br/"/>

    <link href="/css/site/book-collection.css"
          rel="stylesheet" type="text/css" media="all"/>



</head>
<body class="home">

<header id="layout-header">
    <div class="clearfix container">
        <a href="/" id="logo">
            <img src="/img/logo.png" alt="Casa do Codigo">
        </a>

        <div id="header-content">
            <nav id="main-nav">

                <ul class="clearfix">
                    <li><a href="/cart" rel="nofollow">Seu carrinho</a></li>

                    <li><a href="/pages/sobre-a-casa-do-codigo" rel="nofollow">Sobre</a></li>

                    <li><a href="/pages/perguntas-frequentes" rel="nofollow">Perguntas</a></li>
                </ul>
            </nav>
        </div>
    </div>
</header>
<nav class="categories-nav">
    <ul class="container">
        <li class="category"><a href="http://www.casadocodigo.com.br">Home</a></li>
        <li class="category"><a href="/collections/livros-de-agile">
                Agile </a></li>
        <li class="category"><a href="/collections/livros-de-front-end">
                Front End </a></li>
        <li class="category"><a href="/collections/livros-de-games">
                Games </a></li>
        <li class="category"><a href="/collections/livros-de-java">
                Java </a></li>
        <li class="category"><a href="/collections/livros-de-mobile">
                Mobile </a></li>
        <li class="category"><a
                    href="/collections/livros-desenvolvimento-web"> Web </a></li>
        <li class="category"><a href="/collections/outros"> Outros </a></li>
    </ul>
</nav>

<!-- inicio da listagem em si-->
<section id="index-section" class="container middle" ng-controller="HomeController">

    <%if(livros.length) {%>
    <ul id="home-highlight-collection">

        <%for(i=0; i<livros.length && i < 3; i++) {%>
        <li class="col-left">
            <a href="linkDetalhe" class="block clearfix">
                <img width="170" height="240" 
                src="//cdn.shopify.com/s/files/1/0155/7645/products/nodejs-featured_large.png?v=1411486494" alt="<%=livros[i].titulo%>" title="<%=livros[i].titulo%>"/>

                <h2 class="product-title"><%=livros[i].titulo%></h2>
                <small class="buy-button">Lan&#231;amento!</small>
            </a>
        </li>
        <%}%>
    </ul>
    <%}%>


    <h1 class="cdc-call">Últimos dias com os preços promocionais.
        Aproveite!</h1>

    <ul class="clearfix book-collection">
    <%if(livros.length) {%>
        <%for(i=0; i<livros.length; i++) {%>
            <li>
                <a href="linkDetalhe" class="block clearfix">
                    <h2 class="product-title"><%=livros[i].titulo%></h2>
                    <img width="143"
                         height="202"
                         src="//cdn.shopify.com/s/files/1/0155/7645/products/nodejs-featured_large.png?v=1411486494"
                         alt="<%=livros[i].titulo%>"
                         title="<%=livros[i].titulo%>"/>

                    <small class="buy-button">Compre</small>
                </a>
            </li>
        <%}%>
    <%}%>

    </ul>

    <h2 class="cdc-call">Diferenciais da Casa do Código</h2>

    <ul id="cdc-diferenciais" class="clearfix">
        <li class="col-left">
            <h3>E-books sem DRM. Leia onde quiser</h3>

            <p>
                <span class="sprite" id="sprite-drm"></span> Nossos e-books não
                possuem DRM, ou seja, você pode ler em qualquer computador, tablet
                e smartphone.
            </p>
        </li>
        <li class="col-right">
            <h3>Autores de renome na comunidade</h3>

            <p>
                <span class="sprite" id="sprite-renome"></span> Autores que
                participam ativamente na comunidade com Open Source, listas de
                discussão, grupos e mais.
            </p>
        </li>
        <li class="col-left">
            <h3>Receba atualizações dos e-books</h3>

            <p>
                <span class="sprite" id="sprite-atualizacoes"></span> Quando você
                compra um e-book, automaticamente tem direito às atualizações e
                correções dele.
            </p>
        </li>
        <li class="col-right">
            <h3>Livros com curadoria da Caelum</h3>

            <p>
                <span class="sprite" id="sprite-caelum"></span> Desenvolvedores
                experientes que avaliam e revisam os livros constantemente.
            </p>
        </li>
    </ul>


</section>

<!-- fim-->

<footer id="layout-footer">
    <div class="clearfix container">
        <div id="collections-footer">
            <!-- cdc-footer -->
            <p class="footer-title">Coleções de Programação</p>
            <ul class="footer-text-links">
                <li><a href="/collections/livros-de-java">Java</a></li>
                <li><a href="/collections/livros-desenvolvimento-web">Desenvolvimento
                        Web</a></li>
                <li><a href="/collections/livros-de-mobile">Mobile</a></li>
                <li><a href="/collections/games">Games</a></li>
                <li><a href="/collections/livros-de-front-end">Front End</a></li>
            </ul>
            <p class="footer-title">Outros Assuntos</p>
            <ul class="footer-text-links">
                <li><a href="/collections/livros-de-agile">Agile</a></li>
                <li><a href="/collections/outros">e outros...</a></li>
            </ul>
        </div>
        <div id="social-footer">
            <!-- books-footer -->
            <p class="footer-title">Links da Casa do Código</p>
            <ul class="footer-text-links">
                <li><a href="http://livros.casadocodigo.com.br" rel="nofollow">Meus
                        E-books</a></li>
                <li><a href="/pages/sobre-a-casa-do-codigo">Sobre a Casa
                        do Código</a></li>
                <li><a href="/pages/perguntas-frequentes">Perguntas
                        Frequentes</a></li>
                <li><a href="https://www.caelum.com.br">Caelum - Ensino e
                        Inovação</a></li>
                <li><a href="http://www.codecrushing.com/" rel="nofollow">Code
                        Crushing</a></li>
                <li><a
                            href="http://www.casadocodigo.com.br/pages/politica-de-privacidade"
                            rel="nofollow">Política de Privacidade</a></li>
            </ul>
            <p class="footer-title">Redes Sociais</p>
            <ul>
                <li class="social-links"><a
                            href="http://www.twitter.com/casadocodigo" target="_blank"
                            id="twitter" rel="nofollow">Facebook</a> <a
                            href="http://www.facebook.com/casadocodigo" target="_blank"
                            id="facebook" rel="nofollow">Twitter</a></li>
            </ul>
        </div>
        <div id="newsletter-footer">
            <!-- social-footer -->
            <p class="footer-title">Receba as Novidades e Lançamentos</p>

            <div id="form-newsletter">
                <form
                        action=""
                        method="POST" id="ss-form" class="form-newsletter">
                    <ul>
                        <li><input type="hidden" name="pageNumber" value="0"/><input
                                    type="hidden" name="backupCache" value=""/><input
                                    type="email" name="entry.0.single" value="" class="ss-q-short"
                                    id="entry_0" placeholder="seu@email.com"/></li>
                        <li><input type="submit" name="submit"
                                   value="Quero Receber!" id="submit-newsletter"/></li>
                    </ul>
                </form>
                <ul>
                    <li class="ie8"><a
                                href=""
                                rel="nofollow">Receba as Novidades e Lançamentos</a></li>
                </ul>
            </div>
            <ul class="footer-payments">
                <li><img class="accepts-paypal"
                         src="//cdn.shopify.com/s/files/1/0155/7645/t/227/assets/paypal.png?11938499970636259536"
                         border="0" alt="Paypal"/></li>
                <li><img class="accepts-pagseguro"
                         src="//cdn.shopify.com/s/files/1/0155/7645/t/227/assets/pagseguro.png?11938499970636259536"
                         border="0" alt="PagSeguro"/></li>
            </ul>
        </div>
    </div>
</footer>

<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io();
    socket.on('novaPromocao',function(data){
        alert("Livro em promocao "+data.livro.id)
    });
</script>

</body>
</html>

promocoes.js

module.exports = function(app) {
    app.get("/promocoes/form", function(req, res) {
        var connection = app.factory.connectionFactory();
        var produtosDAO = new app.database.produtoDAO(connection);
        produtosDAO.lista(function(erros, resultados) {
            res.render('promocoes/form', { lista: resultados });
        });

        connection.end();
    });

    app.post("/promocoes", function(req, res) {
        var promocao = req.body;
        app.get('io').emit('novaPromocao', promocao);
        res.redirect('promocoes/form');
    });
}
2 respostas
solução!

opa, se vc olhar na aba network, deve ter tido problema na hora de baixar o script do socket.io.

Da uma olhada aqui no codigo de configuracao => https://github.com/asouza/casadocodigo-javascript/blob/master/app.js

Obrigado Alberto, resolveu!

O problema era que estava usando a variável app ao invés da variável http, no momento de chamar função listen. Para registro, deixo a solução abaixo.

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

// Errado
/*
 app.listen(3000, function() {
    console.log('Aplicação NodeJS e Express Rodando');
});
*/

// Correto
 http.listen(3000, function() {
    console.log('Aplicação NodeJS e Express Rodando');
});