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

Banco não grava

Bom dia pessoal. Procurei no fórum minha dúvida, fiz alguma alterações propostas mas mesmo assim não funciona, estou desde ontem tentando resolver.

No final do vídeo 3 da aula 2, após enviar o JSON pelo POSTMAN, o mesmo me informa o status 200 OK só que quando eu vou conferir no MySQL através do SELECT * FROM PAGAMENTOS os dados não estão sendo gravados no banco. Estou utilizando a versão 5.7.25 do MySql, já criei a SCHEMA payfast e a tabela pagamentos com as colunas forma_de_pagamento, valor, moeda, descricao, id, date e status. O servidor também está em execução. Eu consigo incluir uma linha manualmente no banco normal (insert into).

Segue meu connectionFactory.js:

var mysql = require('mysql');

function createDBConnection() { return mysql.createConnection({ host: 'localhost', user: 'root', password: '123456', database: 'payfast', port: 3306 }); }

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


PagamentoDao.js

function PagamentoDao(connection) { this._connection = connection; }

PagamentoDao.prototype.salva = function (pagamento, callback) { this._connection.query('INSERT INTO pagamentos SET ?', pagamento, callback); }

PagamentoDao.prototype.buscaPorId = function (id, callback) { this._connection.query("select * from pagamentos where id = ?", [id], callback); }

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

Alguma sugestão?

Obrigado.

10 respostas

Oi Lucas tudo bem?

Vou precisar simular seu cenário.

Poderia colocar seu projeto do node.js no github e também me fornecer os scripts de criação do banco e das tabelas por gentileza.

Olá André, obrigado pela resposta.

Segue o link: https://github.com/LUCASLATORRE/PayfastNode

E o script:

create table pagamentos(id int auto_increment primary key, forma_de_pagamento varchar(255), valor double, moeda varchar(255), descricao varchar(255), status boolean, date date);

Obrigado pelo apoio.

ESTOU TENDO O MESMO PROBLEMA, NÃO SEI MAIS OQUE FAZER PRA RESOLVER...

Olá pessoal, estou agora em um computador onde não consigo criar um banco de dados mysql.

Amanhã devo simular o cenário.

Se não conseguir resolver, irei chamar outros moderadores / instrutores para me ajudar.

Então não se preocupem, logo tudo será desvendado!!!

Só para vocês não ficarem parados vocês podem fazer outro curso, ou se quiser fazer outro curso relacionado podem fazer esse de MySQL https://cursos.alura.com.br/course/introducao-a-banco-de-dados-e-sql

Valeu obrigado Andre.

Já tentei várias maneiras hoje de resolver mas não consegui.

Obrigado pelo apoio.

Adicionei essas linhas no arquivo connectionFactory.js:

var mysql = require('mysql');

function createDBConnection() {
    const con = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: '123456',
        database: 'payfast',
        port: 3306
    });


con.connect(function (err) {
    if (err) throw err;
    console.log("----[LOG] Conectado ao banco...");
});

return con;
}

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

Com isso, após dar o POST com o JSON através do POSTMAN, aparece o log com a mensagem:

Processando uma requisição de um novo pagamento.. ----[LOG] Conectado ao banco... Pagamento criado.

Ou seja, ele conecta no banco mas não grava as informações. Para testar troquei o nome do banco de dados para "pay" apenas para testar e com isso não conecta:

function createDBConnection() {
    const con = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: '123456',
        database: 'pay',
        port: 3306
    });

Ou seja, pelo meu entendimento ele está conectando mas não grava os dados.

solução!

Achei o erro, no banco de dados a coluna status da tabela está como tipo tinyint e você tentava inserir a string 'CRIADO' mude a coluna do banco para varchar(255) que vai funcionar. Testei aqui e funcionou!

Coloquei o método de salvar igual ao do professor pra ver o erro

pagamentoDao.salva(pagamento, function(erro, resultado){
      if(erro){
        console.log('Erro ao inserir no banco:' + erro);
        res.status(500).send(erro);
      } else {
      console.log('pagamento criado');
      res.location('/pagamentos/pagamento/' +
            resultado.insertId);

      res.status(201).json(pagamento);
    }
    }

Valeu André, agora funcionou! Muito obrigado pelo apoio.

Disponha e bons estudos!!!