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

Cannot read property 'titulo' of undefined

Boa noite.

Fiz todos os passos, mas não consegui exibir a página home da minha aplicação da casa do código. O erro que aparece na página é este:

TypeError: /home/cassia/casadocodigo/app/views/home/index.ejs:93
    91|         <li class="col-left">
    92|             <a href="linkDetalhe" class="block clearfix">
 >> 93|                 <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%>"/>
    94| 
    95|                 <h2 class="product-title"><%=livros[i].titulo%></h2>
    96|                 <small class="buy-button">Lan&#231;amento!</small>

Cannot read property 'titulo' of undefined
    at eval (eval at <anonymous> (/home/cassia/casadocodigo/node_modules/ejs/lib/ejs.js:524:12), <anonymous>:14:34)
    at returnedFn (/home/cassia/casadocodigo/node_modules/ejs/lib/ejs.js:555:17)
    at tryHandleCache (/home/cassia/casadocodigo/node_modules/ejs/lib/ejs.js:203:34)
    at View.exports.renderFile [as engine] (/home/cassia/casadocodigo/node_modules/ejs/lib/ejs.js:412:10)
    at View.render (/home/cassia/casadocodigo/node_modules/express/lib/view.js:128:8)
    at tryRender (/home/cassia/casadocodigo/node_modules/express/lib/application.js:640:10)
    at EventEmitter.render (/home/cassia/casadocodigo/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/cassia/casadocodigo/node_modules/express/lib/response.js:966:7)
    at Query._callback (/home/cassia/casadocodigo/app/routes/home.js:6:17)
    at Query.Sequence.end (/home/cassia/casadocodigo/node_modules/mysql/lib/protocol/sequences/Sequence.js:86:24)
    at Query._handleFinalResultPacket (/home/cassia/casadocodigo/node_modules/mysql/lib/protocol/sequences/Query.js:137:8)
    at Query.EofPacket (/home/cassia/casadocodigo/node_modules/mysql/lib/protocol/sequences/Query.js:121:8)
    at Protocol._parsePacket (/home/cassia/casadocodigo/node_modules/mysql/lib/protocol/Protocol.js:280:23)
    at Parser.write (/home/cassia/casadocodigo/node_modules/mysql/lib/protocol/Parser.js:75:12)
    at Protocol.write (/home/cassia/casadocodigo/node_modules/mysql/lib/protocol/Protocol.js:39:16)
    at Socket.<anonymous> (/home/cassia/casadocodigo/node_modules/mysql/lib/Connection.js:103:28)

Esses são os meus códigos:

home.js

module.exports = function(app)  {
    app.get('/',function(req,res){
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);
        produtosDAO.lista(function(erros,resultados){
            res.render('home/index',{livros:resultados});
        });
        connection.end();    
    });  
}

express.js

var express = require('express');
var load = require('express-load');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');

module.exports = function() {
    var app = express();

    app.use(express.static('./app/public'));
    app.set('view engine', 'ejs');
    app.set('views', './app/views');

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

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

    return app;
}

A página index.ejs está a mesma coisa do exemplo disponibilizado pra download. E está dentro das pastas view e home.

2 respostas
solução!

Opa, na home tem uma for que passa por 3 itens, que supostamente deviam estar cadastrados no banco. Caso tenha menos de 3, aí da esse erro mesmo.. justamente porque ele tenta acessar uma posição do array que não existe.

Obrigada :)