1
resposta

Problema com retorno de dados em classes diferentes utilizando mysql

Estou acompanhando as aulas mas fazendo um projeto diferente mas com os mesmo codigo. Fiz uma classe User que tem um metodo sign. Esse metodo chama outro metodo de uma outra classe que se chama Query e o metodo se chama insert. Quando uso metodos do banco de dados o resultado demora mais pra chegar ai coloco um return no metodo de uma string 'ok' se der certo e 'falid' se der erro. na outra classe User o retorno do metodo insert da classe Query sai como UNDEFINED. ja usei o async/await mas isso não funciona.

CLASSE Query:

insert(table, obj){

        let sql = `INSERT INTO ${table} SET ?`

        let res

        //ESSE METODO DEMORA PRA RESPONDER AI O VALOR NO METODO QUE CHAMA ELA EM OUTRA CLASSE
        //SAI COMO UNDEFINED
        conect.query(sql, obj, (error, result) => {

            if (error) {
                res = 'falid'
            }

            else {
                res = 'ok'
            }
        })  

        //ESSE VALOR SAI UNDEFINED NO OUTRO METODO
        return res

    }    

CLASSE User

async sign(data = {})
    {

        let result = this.Verify.sign(data)

        if(result != 'ok')
        {
            return 'false'
        }
        else{
            //INSERIR PERSON E USER   

            let obj = {'desname': data['desname'], 'dtbirth': ''}

            const res = await this.Query.insert('tb_person', obj)

            console.log(res)

        } 

    }
1 resposta

Boa noite Vinicius, tudo certo?

Eu tenho algumas hipóteses para o que pode estar acontecendo, mas me falta certeza pois seria necessário ver todo o código do projeto que você está desenvolvendo para confirmar. Caso queira, suba o seu código em um repositório público no GitHub e nos envie o link para que os usuários do fórum possam entender melhor os seus problemas.

Na aula, a conexão com o banco de dados foi importada e nomeada como conexao, mas no seu trecho de código está como conect. Isso em si não é um problema, apenas se certifique que anteriormente nesse arquivo tenha uma linha similar à

const conect = require('../infraestrutura/conexao')

Outro item que pode estar introduzindo esse comportamento no seu projeto é a chamada dentro da classe User:

const res = await this.Query.insert('tb_person', obj)

Pois ela parece fugir um pouco da convenção e ter um atributo Query dentro do objeto User, sendo que Query é o nome de uma classe que provavelmente está sendo usada no mesmo arquivo. Para resolver isso eu sugiro seguir uma convenção de nomes mais padrão e reservar nomes iniciando em letras maiúsculas apenas para classes.

Se me permite, eu deixo aqui algumas sugestões:

Faça o curso seguindo de perto as instruções fornecidas, pois o curso em si já tem uma complexidade grande e depurar problemas além do projeto se torna bem complicado.

Não se preocupe em ter um sistema com classes que sejam mais genéricos e permitam manipular o banco de uma forma mais prática. Em uma certa etapa da formação Node.js com Express são passados os cursos de ORM com NodeJS: API com Sequelize e MySQL, onde você vai ver algumas formas mais diretas de manipular bancos de dados sem necessariamente escrever as queries SQL.

Espero ter ajudado e bons estudos! Caso tenha ficado alguma dúvida em aberto basta responder esse tópico ou criar um novo.

Caso este post tenha lhe ajudado, por favor, marque como solucionado ✓.Bons Estudos!