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ç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");
});
-------------------------------------------------------------------------