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

Problema ao fazer deploy no Heroku

Subi minha aplicação do curso de NODE no heroku, porém está dando o erro abaixo, localmente não acontece nenhum erro, mas no heroku sim...

2018-02-24T00:03:28.617558+00:00 app[web.1]: [{"id":2,"titulo":"TEste","descricao":"                TESTE","preco":60}]
2018-02-24T00:03:28.621168+00:00 app[web.1]: TypeError: /app/app/views/home/index.ejs:93
2018-02-24T00:03:28.621172+00:00 app[web.1]:     91|         <li class="col-left">
2018-02-24T00:03:28.621174+00:00 app[web.1]:     92|             <a href="linkDetalhe" class="block clearfix">
2018-02-24T00:03:28.621176+00:00 app[web.1]:  >> 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%>"/>
2018-02-24T00:03:28.621179+00:00 app[web.1]:     94| 
2018-02-24T00:03:28.621181+00:00 app[web.1]:     95|                 <h2 class="product-title"><%=livros[i].titulo%></h2>
2018-02-24T00:03:28.621182+00:00 app[web.1]:     96|                 <small class="buy-button">Lançamento!</small>
2018-02-24T00:03:28.621183+00:00 app[web.1]: 
2018-02-24T00:03:28.621185+00:00 app[web.1]: Cannot read property 'titulo' of undefined
2018-02-24T00:03:28.621187+00:00 app[web.1]:     at eval (eval at compile (/app/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:14:35)
2018-02-24T00:03:28.621189+00:00 app[web.1]:     at returnedFn (/app/node_modules/ejs/lib/ejs.js:580:17)
2018-02-24T00:03:28.621194+00:00 app[web.1]:     at tryHandleCache (/app/node_modules/ejs/lib/ejs.js:223:34)
2018-02-24T00:03:28.621211+00:00 app[web.1]:     at View.exports.renderFile [as engine] (/app/node_modules/ejs/lib/ejs.js:437:10)
2018-02-24T00:03:28.621214+00:00 app[web.1]:     at View.render (/app/node_modules/express/lib/view.js:135:8)
2018-02-24T00:03:28.621215+00:00 app[web.1]:     at tryRender (/app/node_modules/express/lib/application.js:640:10)
2018-02-24T00:03:28.621217+00:00 app[web.1]:     at Function.render (/app/node_modules/express/lib/application.js:592:3)
2018-02-24T00:03:28.621218+00:00 app[web.1]:     at ServerResponse.render (/app/node_modules/express/lib/response.js:1008:7)
2018-02-24T00:03:28.621220+00:00 app[web.1]:     at Query._callback (/app/app/routes/home.js:7:17)
2018-02-24T00:03:28.621222+00:00 
app[web.1]:     at Query.Sequence.end (/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:88:24)
Disconnected from log stream. There may be events happening that you do not see here! Attempting to reconnect...
2018-02-24T00:03:28.621185+00:00 app[web.1]: Cannot read property 'titulo' of undefined
2018-02-24T00:03:28.621189+00:00 app[web.1]:     at returnedFn (/app/node_modules/ejs/lib/ejs.js:580:17)
2018-02-24T00:03:28.621187+00:00 app[web.1]:     at eval (eval at compile (/app/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:14:35)
2018-02-24T00:03:28.621194+00:00 app[web.1]:     at tryHandleCache (/app/node_modules/ejs/lib/ejs.js:223:34)
3 respostas

Oi Edi, tudo bem? Me parece que você não tem produtos no banco de dados e a página de listagem tenta mostrar produtos que não existem. Você pode adicionar produtos no banco antes ou então fazer um if para verificar se o array de produtos é vazio. Assim você só manda exibir os dados do produto se a lista tiver produtos.

Deu pra entender?

solução!

Olá, obrigado por responder!

Na realidade o meu problema era outro, eu tinha dados no banco, porém na rota da HOME eu não estava convertendo o objeto para JSON. No exemplo que temos no curso, também não converte e dá o mesmo problema. Então pra resolver eu tive que fazer conforme o código abaixo:

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){
            console.log(resultados);
            res.render('home/index',{livros:resultados});
        });
        connection.end();
    });
}

ai eu acrescentei a linha

 resultados = JSON.stringify(resultados);

Ficando assim:

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){
        resultados = JSON.stringify(resultados);
            console.log(resultados);
            res.render('home/index',{livros:resultados});
        });
        connection.end();
    });
}

Grande abraço!

Ótimo EDI! Pensei que o prolema pudesse ser outro.