#javascript #mysql #node.js #mysqljs
#javascript #mysql #node.js #mysqljs
Вопрос:
Я использую пакет mysql от https://www.npmjs.com/package/mysql
Итак, в основном у меня есть эта функция в файле:
module.exports.listGames = (id) => {
let query = 'SELECT * FROM test';
if (id) {
query = 'WHERE userid = ' connection.escape(id);
}
connection.query(query, function(err, results) {
if (err) {
throw err;
}
console.log(results);
});
}
и я хочу вернуть эти результаты в формате json
таким образом, я могу вызвать это в другом файле, который является этой функцией:
function sendGames(req, res) {
const games = db.listGames(req.query.game);
res.json(games);
}
итак, мой вопрос в том, как я могу вернуть результаты этого запроса?
Ответ №1:
Вы можете либо
- Используйте обратный вызов
module.exports.listGames = (id, cb) => {
let query = 'SELECT * FROM test';
if (id) {
query = 'WHERE userid = ' connection.escape(id);
}
connection.query(query, function(err, results) {
if (err) {
throw err;
}
cb(results);
});
}
module.exports.listGames(12, (results) => {
console.log(results);
})
- Используйте обещание
module.exports.listGames = (id) => {
let query = 'SELECT * FROM test';
if (id) {
query = 'WHERE userid = ' connection.escape(id);
}
return new Promise((resolve, reject) => {
connection.query(query, function(err, results) {
if (err) {
throw err;
}
resolve(results);
});
})
}
module.exports.listGames(12).then(results => console.log(results)
Вы можете закодировать ответ из запроса mysql в JSON с помощью JSON.stringify.
Комментарии:
1. Использование обратного вызова выдает мне ошибку «обратный вызов — это не функция», использование promise возвращает мне пустой объект. Мне не нужна эта строка «module.exports.listGames(12).then(results => console.log(результаты)», поскольку я хочу вызвать функцию с запросом. запрос в другом файле и console.log(результаты) был только для целей отладки. В любом случае спасибо за вашу помощь.
2. @Nicekor эта строка
module.exports.listGames(12).then(results => console.log(results)
демонстрирует, как использовать функцию listGames, возвращающую объект promise. Вы можете экспортировать функцию listGames, и клиентский код может использовать функцию таким же образом, вызвав .then(). Также при обратном вызове вы убедились, что передали правильную функцию?
Ответ №2:
module.exports.listGames = (id) => {
let query = 'SELECT * FROM test';
if (id) {
query = 'WHERE userid = ' connection.escape(id);
}
connection.query(query, function(err, results) {
if (err) {
throw err;
}
return (results);
});
}
Объявите асинхронную функцию javascript и вызовите метод отсюда.
async function sendGames (req, res) {
var games = await db.listGames(req.query.game);
res.json(games);
}