Экспорт данных из функции [mysql, node.js, discord.js]

#javascript #mysql #sql #node.js #discord.js

Вопрос:

У меня здесь такая проблема с экспортом данных из функций. Я не знаю, можно ли это вообще сделать, но я не вижу здесь никакого другого решения. Моя проблема в том, что я экспортирую функцию и хотел бы экспортировать результат этой функции, поэтому в данном случае у меня есть MYSQL. Я не могу добавить rows module.exports = {sql, rows} , потому что я получаю сообщение, которое rows не определено. Я прошу о помощи или о каком-то другом решении.

 //------------------------------
📁 index.js
//------------------------------

const mysql = require('mysql')
const db = require('./database')

var con = mysql.createConnection({
        host: db.host,
        user: db.user,
        password: db.password,
        database: db.database
})

con.connect(err => {
        if(err) console.log(err)
})

function sql(sql){
        con.query(sql, (err, rows) => {
            if(err) console.log(err)

        })
}

module.exports = { sql, rows }

// con.end()

//------------------------------
📁 Command file
//------------------------------

const sql = require('./../config/test')

sql.sql("SELECT * FROM `servers`")
console.log(sql.rows)

//------------------------------
📁 Console error
//------------------------------
(node:30132) UnhandledPromiseRejectionWarning: ReferenceError: rows is not defined
 

Ответ №1:

Вы можете использовать функцию обратного вызова, в которой вы можете использовать данные так, как хотите. Передав функцию в качестве параметра sql функции, вы можете вызвать эту функцию обратного вызова с rows извлеченной из базы данных в качестве параметра.

Взгляните на код, который я отредактировал для вас:

Ваш index.js

 /* Skipped all code above that isn't important for this example */

function sql(query, callback){
    con.query(query, (err, rows) => {
        if(err) console.log(err);

        callback(rows);
    });
}

module.exports = {sql}
 

Ваш командный файл

 const queryHandler = require('./../config/test');

// Call the sql function and pass a callback as the 2nd parameter
queryHandler.sql("SELECT * FROM `servers`", (rows) => {
    // Do whatever you want with the rows
    console.log(rows);
});
 

Попробуйте и посмотрите, как все пойдет