#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);
});
Попробуйте и посмотрите, как все пойдет