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

Novo MetodoSalva - não salva

Quando coloco

ProdutosDAO.prototype.salva = function (produto, callback) {
    this._connection.query('insert into produtos (titulo, preco, descricao) values (?, ?, ?)',  [produto.titulo, produto.preco, produto.descricao], callback);
}

Com underline antes de connection o console da o erro

TypeError: Cannot read property 'query' of undefined
    at ProdutosDAO.salva (...alura/app/infra/ProdutosDAO.js:10:21)

e quando coloco sem o underline ele não insere no banco de dados, apenas segue para o res.render('produtos/lista')

ps. o select está funcionando, exibindo a lista de livros, mas este também está usando connection sem underline

3 respostas
solução!

Oi Ramon, o erro indica que a variável connection não está definida.. Pode mostrar o arquivo do ProdutoDAO e também o ponto do seu código onde vc quer usá-lo?

Segue, produtoDAO:

function ProdutosDAO(connection){
  this.connection = connection;
}

ProdutosDAO.prototype.lista = function(callback){
      this.connection.query('select * from livros',callback);
  }

  ProdutosDAO.prototype.salva = function (produto, callback) {
    this._connection.query('insert into produtos (titulo, preco, descricao) values (?, ?, ?)',  [produto.titulo, produto.preco, produto.descricao], callback);
}


module.exports = function(){
    return ProdutosDAO;
}

e na classe produtos o post de salvar:

app.post('/produtos/salva', function(req,res){

      var produto = req.body;

      var connection = app.infra.dbConnection();
      var produtosDAO = new app.infra.ProdutosDAO(connection);

      produtosDAO.salva(produto, function(erros, resultados){
        produtosDAO.lista(function(erros,resultados){
          console.log(erros);
        res.render('produtos/lista',{lista:resultados});
      })
      });
    });

Opa Ramon,

Realmente vc deixou o nome da variável como connection e não _connection. É só usar com o nome que vc declarou :).