Olá, Estou com um com dificuldade em passar o retorno de uma função do backend para o frontend. Fiz uma consulta no meu banco de dados no backend e no return(onde acho que está o erro) quando eu chamo no frontend não vai o array da consulta, o "console.log(result)" do backend está mostrando o array normalmente mas quando peço para ele dar o console.log("Valor retorno " + retorno) no frontend o array aparece vazio. A chamada do backend para o frontend e a chamado do retorno que eu tenho duvidas de como usar
Backend
import mysql from "mysql"
export async function consultaDB() {
var retorno
var connection
connection = mysql.createConnection({
host: "xxxxxx",
user: "xxxxxx",
password: "xxxx",
database: "xxxx"
});
connection.connect(async function (err) {
if (err) console.log(err);
console.log("Conectado");
var sql = "select * from medicos";
await connection.query(sql, function (err, result, fields) {
retorno = result
console.log(result)
});
});
return retorno
}
Frontend
import { consultaDB } from 'backend/testeMysql';
var dadosRep = new Array()
var retorno = []
$w.onReady(async function () {
retorno = consultaDB;
console.log("Valor retorno " + retorno);
});
export function consultaBanco_click(event) {
consultaDB()
}
Oi @Washington Garcia Santos.
Montei um ambiente com o mysql rodando na aws, e consegui fazer um consulta nessa base de dados. Esse foi o código usado:
backend db.jsw
import mysql from 'mysql'; //usei uma string de conexão, o objeto gerou problemas var connection = mysql.createConnection("mysql://..."); function query(sql) { return new Promise((resolve, reject) => { connection.connect(); connection.query(sql, function (error, results, fields) { if (error) reject(error); resolve(results) }); connection.end(); }) } export function getTags() { return query("SELECT * FROM tb_tags") }
frontend:
import {getTags} from 'backend/db'; $w.onReady(function () { getTags().then(tags => { console.log(tags); }) .catch(error => { console.log(error); }); });
A conexão com o banco está certa, porq eu consigo ver os dados da consulta com um "console.log(result)" que dou la no backend mas se faço um console.log(resolve) ele da erro de null
connection.query(sql, function(err, result, fields) { if (err) reject(err) console.log(result) // retorna array resolve(result) console.log(resolve) //retorna null
Obrigado pelo retorno, Fiz as alterações no codigo e agora está dando o erro: "Promise in data hook or backend function rejected with undefined"
Fiz algumas correções no código:
function query(sql) { return new Promise((resolve, reject) => { var connection = mysql.createConnection({ host: "xxxxxx", user: "xxxxxx", password: "xxxx", database: "xxxx" }); connection.connect(error => reject(error)) connection.query(sql, function(err, result, fields) { if (err) reject(err) resolve(result) }); connection.end(); }) } export async function consultaDB() { const resultado = await query("select * from medicos") return resultado; }
export async function consultaBanco_click(event) { const resultado = await consultaDB(); console.log(resultado; }
Estão estou com problemas na passagem dos dados para o frontend, realmente estou perdido nessa questão
Oi @Washington Garcia Santos.
Seu código tem problemas de implementação, principalmente no uso das Promises.