Как вернуть результаты запроса? Mysql nodejs

#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:

Вы можете либо

  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);
})
  
  1. Используйте обещание
 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);
}