23
respostas

"select * from pagamentos" não retorna nada.

Estou seguindo o passo a passo do curso e até agora está ok. Porém, quando eu vou consultar o banco de dados pela primeira vez, conforme o instrutor faz no vídeo, eu recebo a mensagem: Empty set(0,00 sec). Alguem pode me ajudar? Abs

23 respostas

Bom dia José. Tem registros na sua tabela no banco?

Creio que não. Fiz os mesmos procedimentos do professor e havia entendido que isso subiria os registros para o banco de dados. Mas quando fui consultar, não aparecer nada.

tenta fazer um insert no banco para ver se a listagem funciona

como faço isso? Sou leigo com banco de dados ainda.

INSERT INTO pagamentos (column1, column2, column3) VALUES (value1, value2, value3);

Mas sugiro que faça os cursos de SQL da Alura que por sinal são ótimos pra entender mais como isso funciona.

Obrigado André.

Infelizmente mesmo assim não foi. Dá erro de column1 undefined. Você teria alguma outra sugestão?

Preciso estudar mesmo sobre SQL, só que queria terminar esse de node primeiro uahauhau

column1 é o nome da sua coluna tem que trocar. Em português seria algo do tipo (não funciona só pra demonstrar):

INSERT INTO pagamentos (column1, column2, column3) VALUES (value1, value2, value3);

INSIRA DENTRO DE pagamentos (coluna1,coluna2,coluna3) VALORES (valor1,valor2,valor3);

André, mais uma vez, muito obrigado. Eu realizei o CHECK TABLE e SHOW COLUMNS para a table 'pagamentos' e está tudo ok. Porém ainda não consigo inserir os dados conforme o instrutor.

Você teria mais alguma sugestão por gentileza?

Abs

Como você está fazendo para inserir os dados?

Eu estou usando o comando do vídeo: curl http://localhost:3000/pagamentos/pagamento -X POST -v -H "Content-type: application/json" -d @files/pagamento.json | json_pp

Creio que seja esse comando.

Tenta usar o Postman que o professor cita, ele é bem mais amigável. E também pra ter certeza que não é problema do curl

Ah é que até esse vídeo ele não falou nada do postman. Só fez através do cURL. Por isso queria ver o que tava acontecendo hauhauhau

Este é o postman https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop

Vou dar uma olhada, obrigado. O problema é que entendo que tem que seguir o que o professor explica e chegar no mesmo resultado, caso contrário, não faz sentido.

No mais eu fiz uma alteração no código, no arquivo pagamentos.js. Inseri o console.log('pagamento criado: ' + resultado):

    pagamentoDao.salva(pagamento, function(erro, resultado){
      console.log('pagamento criado: ' + resultado);
      res.json(pagamento);

Depois de inserir essa linha, eu rodo o cURL novamente e me retorna a mensagem:

"pagamento criado: undefined"

Sou leigo, mas acho que esse undefined não deveria aparecer ai, certo? Você tem alguma ideia?

Isso acontece porque a variável resultado está vazia. Como você tá chamando pagamentoDao.salva no seu código?

Olha só, o meu arquivo pagamentos.js segue abaixo. Creio que ele está realizando a chamada da função.

module.exports = function(app){
  app.get('/pagamentos', function(req, res){
    console.log('Recebida requisição de teste na porta 3000.')
    res.send('Ok!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
  });

  app.post('/pagamentos/pagamento', function(req, res){
    var pagamento = req.body;
    console.log('processando uma requisição de um novo pagamento');

    pagamento.status = 'CRIADO';
    pagamento.data = new Date;

    var connection = app.persistencia.connectionFactory();
    var pagamentoDao = new app.persistencia.PagamentoDao(connection);

    pagamentoDao.salva(pagamento, function(erro, resultado){
      console.log('pagamento criado: ' + resultado);
      res.json(pagamento);
    });
  });
}

E o meu arquivo PagamentoDao.js ficou assim:

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

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

PagamentoDao.prototype.lista = function(callback) {
    this._connection.query('select * from pagamentos',callback);
}

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

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

O que você acha, por favor?

Tente fazer o seguinte ajuste para identificar melhor o problema:

 pagamentoDao.salva(pagamento, function(erro, resultado){
      console.log(erro); //Erro ao salvar
      console.log('pagamento criado: ' + resultado);
      res.json(pagamento);

A parte do SQL do PagamentoDao.js está esquisita.

Antes da linha

    this._connection.query('INSERT INTO pagamentos SET ?', pagamento, callback);

coloca

console.log('INSERT INTO pagamentos SET ?', pagamento, callback);

Só pra ver como está essa string. Aí posta aqui o que escreveu no log.

Daniel e André,

Após as alterações sugeridas pelos dois, eu rodei o cURL de novo e apareceu o seguinte:

xavito@xavito-300E5M-300E5L:~/Desktop/TI/curso node/curso-api/payfast$ nodemonndex.js
[nodemon] 1.18.6
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
body-parser deprecated undefined extended: provide extended option config/custom-express.js:9:22
consign v0.1.6 Initialized in /home/xavito/Desktop/TI/curso node/curso-api/payfast
+ ./controllers/pagamentos.js
+ ./persistencia/PagamentoDao.js
+ ./persistencia/connectionFactory.js
Servidor rodando na porta 3000
processando uma requisição de um novo pagamento
INSERT INTO pagamentos SET ? { forma_de_pagamento: 'payfast',
  valor: 10,
  moeda: 'BRL',
  'descrição': 'criando um pagamento',
  status: 'CRIADO',
  data: 2018-11-20T16:32:01.338Z } function (erro, resultado){
         console.log(erro); //Erro ao salvar
         console.log('pagamento criado: ' + resultado);
         res.json(pagamento);
    }
{ Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
    at Handshake.ErrorPacket (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/protocol/sequences/Handshake.js:124:18)
    at Protocol._parsePacket (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/protocol/Protocol.js:278:23)
    at Parser.write (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/protocol/Parser.js:76:12)
    at Protocol.write (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/Connection.js:91:28)
    at Socket.<anonymous> (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/Connection.js:502:10)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    --------------------
    at Protocol._enqueue (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/Connection.js:118:18)
    at Connection._implyConnect (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/Connection.js:453:10)
    at Connection.query (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/mysql/lib/Connection.js:198:8)
    at PagamentoDao.salva (/home/xavito/Desktop/TI/curso node/curso-api/payfast/persistencia/PagamentoDao.js:7:22)
    at /home/xavito/Desktop/TI/curso node/curso-api/payfast/controllers/pagamentos.js:17:18
    at Layer.handle [as handle_request] (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/home/xavito/Desktop/TI/curso node/curso-api/payfast/node_modules/express/lib/router/route.js:112:3)
  code: 'ER_NOT_SUPPORTED_AUTH_MODE',
  errno: 1251,
  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
  sqlState: '08004',
  fatal: true }
pagamento criado: undefined
^Cxavito@xavito-300E5M-300E5

Tenta atualizar o MySQL como ele mesmo está sugerindo.

  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',

Já vi esta mensagem de erro em outros post. Veja se estes links ajudam:

https://cursos.alura.com.br/forum/topico-conexao-com-mysql-61688

https://cursos.alura.com.br/forum/topico-erro-er_not_supported_auth_mode-client-does-not-support-authentication-protocol-requested-by-server-consider-upgrading-mysql-client-61991

André, já atualizei e conferi agora e o erro permanece.

Daniel, vou dar uma olhadas nesses linls.

Tentei o que estava sugerido nesses links, mas o mysql não permite fazer essas alterações. Acho que vou desistalar e instalar de novo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software