Quando criei o arquivo "home.js" com a rota da página "index.ejs", foi necessário eu utilizar o JSON.stringify no retorno do SQL para a página HTML, conforme abaixo:
module.exports = function(app) {
app.get('/', function(request, response, next) {
var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);
produtosDAO.listar(function(error, results) {
if (error) {
return next(error);
};
response.render('home/index', {livros : JSON.stringify(results)});
});
connection.end()
});
};
Se eu não colocá-lo, dá o seguinte erro:
TypeError: /home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/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="urlImagem" alt="<%=livros[i].titulo%>" title="<%=livros[i].titulo%>"/>
94|
95| <h2 class="product-title"><%=livros[i].titulo%></h2>
96| <small class="buy-button">Lançamento!</small>
Cannot read property 'titulo' of undefined
at eval (eval at <anonymous> (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/ejs/lib/ejs.js:495:12), <anonymous>:14:32)
at returnedFn (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/ejs/lib/ejs.js:524:17)
at View.exports.renderFile [as engine] (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/ejs/lib/ejs.js:378:31)
at View.render (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/express/lib/view.js:126:8)
at tryRender (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/express/lib/application.js:639:10)
at EventEmitter.render (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/express/lib/application.js:591:3)
at ServerResponse.render (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/express/lib/response.js:960:7)
at Query._callback (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/app/routes/home.js:10:22)
at Query.Sequence.end (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/mysql/lib/protocol/sequences/Sequence.js:86:24)
at Query._handleFinalResultPacket (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
at Query.EofPacket (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
at Protocol._parsePacket (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/mysql/lib/protocol/Protocol.js:280:23)
at Parser.write (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/mysql/lib/protocol/Parser.js:74:12)
at Protocol.write (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/home/kelvinwnfeitosa/Documentos/Projetos/casa-do-codigo/node_modules/mysql/lib/Connection.js:109:28)
at emitOne (events.js:77:13)
Identifiquei que o formato que o SQL está retornando vem com o objeto "RowDataPacket", por isso a necessidade de utilizar o JSON.stringify.
Só que ná rota do arquivo "produtos.js" o erro não acontece sem o JSON.stringify, conforme abaixo:
module.exports = function(app) {
app.get('/produtos', function(request, response, next) {
var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);
produtosDAO.listar(function(erros, results) {
if (erros) {
return next(erros);
};
response.format({
html : function() {
response.render('produtos/lista', {lista : results});
},
json : function() {
response.json(results);
}
});
});
connection.end();
});
Alguém sabe me dizer o porquê do erro e porque as vezes é necessário utilizar o JSON.stringify e outras vezes não?