15
respostas

Erro mysql.createDBConnection is not

Oi, estou com problema aqui, ao enviar o curl para salvar o produto no bd, apresenta o seguinte erro... Ja revisei o codigo e não o que esta acontecendo. Alguem tem alguma ideia?

connection

var mysql = require('mysql');

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

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

pagamentos

module.exports = function(app) {
    app.post("/pagamentos/pagamento", function(req,res){
        var pagamento = req.body;        
        console.log('processando pagamento.');

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

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

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

pagamentoDao

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;
};

rotas

var express = require('express');
var consign = require('consign');
var bodyParser= require('body-parser');

module.exports =function(){
    var app = express();
    app.use(bodyParser.urlencoded({extended: true}));
    app.use(bodyParser.json());
    consign()
        .include('controllers')
        .then('persistencia')
        .into(app);
    return app;
}
15 respostas

Oi Antonio, sinceramente, não conseguir ver nenhum problema no seu código. Você pode disponibilizar o projeto no GitHub pra mim testar aqui?

Olá, vou tentar, não seu usar o gitHub muito bem.

Oi tentei aqui, o gitHub não é nada nada auto explicativo ou facil de usar, não sei ainda como usar o GitHub, tem algum outro jeito mais facil de fazer upload de arquivo?

Está dando o erro

git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

Oi Antonio, eu acabei lembrando de um detalhe, me explica uma coisa, você está usando que versão do MySQL? É a 8?

Não, uso o easyPHP com mysql 5.7, ams ele está na porta 3006

Oi Antonio, a porta do MySQL é 3006? Então você precisa informar isso na conexão, isso por que a porta que ele tenta conectar por padrão é a 3306.

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

coloquei a porta correta, mas agora está acontencendo o erro:

curl: (3) Host name ' ' contains bad letter

O que é isso? Algum erro na postagem do curl?

  curl http://localhost:3306/pagamentos/pagamento \
  -X POST \ 
  -v \
  -H "Content-type: application/json" \
  -d '{
          "forma_de_pagamento": "payfast",
          "valor": "10.87",
          "moeda": "BRL",
          "descricao": "descrição do pagamento"
      }'

Oi Antonio, desculpa, acho que você me entendeu errado. A porta 3306 é do servidor MySQL, não da sua aplicação node.

Faz o seguinte, você consegue me disponibilizar seu projeto de alguma forma? Acho que você pode colocar tudo em um zip e compartilhar no Google Drive ou Dropbox com uma url pra mim baixar. Pode ser?

sim confudi, o curl envia para aplicação na 3006. Estranho pois o url normalmente fica na porta localhost3000. Ja o BD fica na 3306, e coloquei na porta certa.

Entendo muito pouco sobre redes ...

Segue arquivo zip do projeto https://drive.google.com/open?id=1Q-VehOQfQHsedBlRpbQV2LdFv3Rj6o4X

Achou algo errado?

Oi Antonio, desculpa a demora, mas encontrei alguns problemas sim, vou listar eles abaixo e as soluções, tá bem?

1 - Você, talvez na dúvida, criou dois arquivos connectionFactory.js, um dentro de config e outro dentro de persistência. O arquivo que está com o erro é o que está dentro de persistência, ele tá chamando a função createDBConnection do MySQL, o nome correto é createDBConnection.

Você não precisa do connectionFactory dentro de config, pode apagar.

2 - No seu PagamentoDao, há incosistências, um momento você faz this.connection e em outro você faz this._connection, valem lembrar que a segunda forma é a recomendada, então deveria modificar as demais partes dentro de PagamentoDao.

3 - No seu controller pagamentos, você está dando new em app.persistencia.PagamentoDao, mas o nome do arquivo na pasta é pagamentoDao (p minúsculo). Adapte aqui também.

Com essas correções, seu projeto deve voltar a funcionar corretamente.

Obrigado pela sua analise, mas não deu certo. Fiz as alterações mas continua na mesma. Fiz upload de um video mostrando o erro. O que pode estar acontencedo? https://youtu.be/hokJsabSUvE

O nodejs parece ser muito pratico de usar, mas da um trabalho dos infernos para configurar, fora que a enorme quantidade de pacotes, exige já um nivel avançado para entendimento, e restringe muito o acoplamento do sofware ao se reutilizar o exemplo em outros casos. É mais para fazer acesso a BD mesmo. Esse CURL tbm via git do windows não é nada amigavel, acho melhor usar o formulário do browser mesmo para fins de aprendizado.

Antônio, você não corrigiu o primeiro ponto corretamente, vi que apagou o arquivo dentro de config, mas esqueceu de mudar o nome da função que usa do modulo do MySQL. A função é createConnection e não createDBConnection. Aqui o certo:

var mysql = require('mysql');

function createDBConnection(){
    return mysql.createConnection({ // tem que mudar essa linha pra ficar desse jeito
        host:'localhost',
        user:'root',
        password:'',
        database:'payfast'
    });
}

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

O seu está assim:

var mysql = require('mysql');

function createDBConnection(){
    return mysql.createDBConnection({ //essa linha tá diferente
        host:'localhost',
        user:'root',
        password:'',
        database:'payfast'
    });
}

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

Ah sim, é que tinha alterado para ver se funcionava. O erro que aparece host name contains ' ' bad letters. Sinceramente não sei o que está acontencendo, deve ser algo com CURL, pq na aula anterior estava acessando o BD normal via browser...

Puxa, agora eu não sei o que pode ser, eu não tive esse problema. Tenta colocar a url entre aspas no curl.