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

WebSocket no servidor

Não consegui mostrar a mensagem da promoção.

//app\routes\home.js

module.exports = function(v_app)  {

    v_app.get('/',function(req,res){
        var v_connection = v_app.infra.connectionFactory();
        var v_produtosDAO = new v_app.infra.ProdutosDAO(v_connection);
        v_produtosDAO.lista(function(erros,resultados){
            res.render('home/index',{livros:resultados});
        });
        v_connection.end();    
    });  
}
-------------------------------------------------------------------------
//./config/express

//assim sempre vai carregar a o express com uma nova versão
//module.exports = function () {
//    console.log("modulo ta sendo carregado");
//    var app = require('express')();
//    app.set('view engine', 'ejs');
//    return app;
//};

// ou assim carrega apenas uma vez a versão do express
var v_express = require('express');
var v_load = require('express-load');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');

module.exports = function () {

    console.log("modulo ta sendo carregado");

    var v_app = v_express();

    v_app.use(v_express.static('./app/public'));

    v_app.set('view engine', 'ejs');
    v_app.set('views', './app/views');
    v_app.use(expressValidator());

    v_app.use(bodyParser.urlencoded({extended: true}));
    v_app.use(bodyParser.json());

    v_load('routes',  {cwd: 'app'})
        .then('infra')
        .into(v_app);

    return v_app;
};

-------------------------------------------------------------------------
<!-- app\views\home -->
<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">

            <ul id="home-highlight-collection">
                <%for(i=0; 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">
                <%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/177/assets/accepts_paypal.png?11981592617154272979"
                                border="0" alt="Paypal" width="130" height="80"/></li>
                        <li><img class="accepts-pagseguro"
                                src="//cdn.shopify.com/s/files/1/0155/7645/t/177/assets/logopagseguro.png?11981592617154272979"
                                border="0" alt="PagSeguro" width="180" height="26"/></li>
                    </ul>
                </div>
            </div>
        </footer>
        <script src="/socket.io/socket.io.js">
        </script>
        <script>
            var v_socket = io();
            v_socket.on('novaPromocao',function(p_data){
                //alert("Livro em promocao "+p_data.livro.id)
                alert("Livro em promocao "+p_data.livro.id+" "+p_data.livro.descricao)
            });
        </script>        
    </body>
</html>
-------------------------------------------------------------------------
{
  "name": "casadocodigo",
  "version": "1.0.0",
  "description": "Site da Casa do Código - Feito pelo Cacá",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Caca",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.17.1",
    "ejs": "^2.3.3",
    "express": "^4.15.2",
    "express-load": "^1.1.15",
    "mysql": "^2.13.0",
    "socket.io": "^2.0.2"
  },
  "devDependencies": {
    "mocha": "^3.4.1",
    "supertest": "^3.0.0"
  }
}

-------------------------------------------------------------------------
<!-- app\views\promocoes -->
<meta charset="UTF-8">
<html>
    <body>
        <form action='/promocoes' method="post">
        <div>
            <input type="text" name="mensagem"/>
        </div>

        <div>
            <select name="livro[id]">
                <%for(var i=0;i<lista.length;i++){%>
                    <option value="<%=lista[i].id%>"><%=lista[i].titulo%></option>
                <%}%>
            </select>
        </div>
        <input type="submit" value="Cadastrar promoção"/>
    </body>

</html>
-------------------------------------------------------------------------
//app\routes\promocoes.js

module.exports = function(v_app) {
    v_app.get("/promocoes/form",function(req,res){
        var v_connection = v_app.infra.connectionFactory();
        var v_produtosDAO = new v_app.infra.ProdutosDAO(v_connection);
        v_produtosDAO.lista(function(erros,resultados){
            res.render('promocoes/form',{lista:resultados});
        });
        v_connection.end();
    });

    v_app.post("/promocoes",function(req,res){
        var v_promocao = req.body;
        //console.log(v_promocao);
        v_app.get('v_io').emit('novaPromocao',v_promocao);
        res.redirect('promocoes/form');
    });   
}
-------------------------------------------------------------------------
//app.js

// estes comandos foram transferidos para o arquivos express.js
//var express = require('express');
//var app = express();
//app.set('view engine', 'ejs');

//depois de implementado o arquivo express.js fica assim
var v_app = require ('./config/express')();

var v_http = require('http').Server(v_app);
//var io = require('socket.io')(v_app)
var v_io = require('socket.io')(v_http)

v_app.set('v_io',v_io);

//código transferido para o arquivo ./app/routes/produtos.js
//app.get('/produtos', function (req, res) {
//res.send("<html><body><h1>Listagem de produtos</h1></body></html>") //tranferido para o arquivo ./views/produtos/lista.ejs
//    console.log("atendendo a requisicao");
//    res.render("produtos/lista");
//});

//depois de implementado o arquivo produtos.js fica assim
//var rotasProdutos = require('./app/routes/produtos')(v_app);
//esta linha saiu porque a rota passou a ser carregada no arquivo /config/express

//antes de definir a variavel v_http 
//v_app.listen(3000, function () {
//depois de devinir a variavel v_http
v_http.listen(3000, function () {    
    console.log("servidor rodando na porta 3000");

});
-------------------------------------------------------------------------
3 respostas

Opa, mas o que acontece? dá algum erro? chegou a dar uma debugada para verificar se todos os códigos que deveriam ser executados estão de fato rodando?

não retorna erro nenhum, simplesmente não mostra a pagina de promoção

solução!

Na tag script da sua view, você não deveria ter usado:

alert("Livro em promocao "+p_data.livro.id+" "+p_data.mensagem)

ao invés de:

alert("Livro em promocao "+p_data.livro.id+" "+p_data.livro.descricao)

?