Есть несколько вещей, которые кажутся странными в том, как вы делаете это:
У вас есть асинхронная операция, но вы хотите просто получить значение, не ожидая завершения операции.Попробуйте что-то вроде этого:
module.exports = new Promise ((resolve, reject) => {
mysql.query('SELECT id, name FROM news', (error, results) => {
if (error)
reject({error: `DB Error: ${error.code} (${error.sqlState})`})
resolve(JSON.parse(JSON.stringify(results)));
});
});
Затем, чтобы получить новости:
var getNewsAsync = require('./news')
getNewsAsync.then(news => console.log(news))
Было бы чище / короче, если бы вы фактически использовали async / await с mysql
lib.
Обновление :
С Узлом 8 и выше вы сможете обещать методы mySQL
lib.Хотя, возможно, есть лучшие варианты npm, чтобы это работало.Вот непроверенная версия:
const mysql = require('mysql');
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});
const query = util.promisify(conn.query).bind(conn);
module.exports = async () => {
try {return await query('SELECT id, name FROM news')} finally {conn.end()}
}
Для получения новостей:
var getNewsAsync = require('./news')
console.log(await getNewsAsync())