首页 > 解决方案 > 从函数中导出数据 [mysql, node.js, discord.js]

问题描述

我在从函数导出数据时遇到了这样的问题。我不知道它是否可以完成,但我在这里看不到任何其他解决方案。我的问题是我正在导出一个函数,我想导出这个函数的结果,所以在这种情况下我有 MYSQL。我无法添加rowsmodule.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

标签: javascriptmysqlsqlnode.jsdiscord.js

解决方案


您可以使用回调函数,在该函数中您可以根据需要使用数据。通过将函数作为参数传递给函数,您可以使用从数据库中获取的数据作为参数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);
});

试一试,看看效果如何


推荐阅读