Как я могу решить обещанный mysql запрос в express. js? - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь использовать обещание пакета npm - mysql и возвращать данные json (или строка не имеет значения), но у меня возникают проблемы после цепочки обещаний с await / asyn c.

С текущим кодом я получаю Promise {undefined} в console.log, который я имею прямо перед ответом пользователю. Ответ просто ничего не отправляет пользователю и закрывает его. Может кто-нибудь указать в правильном направлении, как отладить это?

index. js

app.get("/", async (req, res) => {
  console.log(  Promise.resolve(await getLogs())  ) 
  res.send(await getLogs());
});

mysql. js

const mysql = require("promise-mysql");

let pool;

async function startDatabasePool() {
    pool = await mysql.createPool({
    connectionLimit: 10,
    host: "xxx",
    user: "xxx",
    password: "xxx",
    database: "xxx"
  });
}

async function getDatabasePool() {
  if (!pool) await startDatabasePool();
  return pool;
}

module.exports = {
  getDatabasePool,
  startDatabasePool
};

пользователей . js

const { getDatabasePool } = require("./mysql");

async function getLogs() {
  let pool = await getDatabasePool();

  pool.query("SELECT * from logs order by logdate desc", function(
    error,
    results,
    fields
  ) {
    if (error) throw error;
    return JSON.stringify(results);
  });
}
module.exports = {
  getLogs
};

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

index. js

app.get("/", async (req, res) => {
  const result = await getLogs();
  res.send(result);
});

mysql. js

const mysql = require("promise-mysql");

let pool;

module.exports.startDatabasePool = async () => {
    pool = await mysql.createPool({
    connectionLimit: 10,
    host: "xxx",
    user: "xxx",
    password: "xxx",
    database: "xxx"
  });
}

module.exports.getDatabasePool = async () => {
  if (!pool) await startDatabasePool();
  return pool;
}

// convert function as promise

module.exports.executeQuery = async(params) => {
    return new Promise((resolve, reject) => {
        pool.query(params, function (error, result, fields) {
            if (error) {
                reject(error);
            } else {
                resolve(result);
            }
        });
    });
};

пользователей. js

const { executeQuery } = require("./mysql");

module.exports.getLogs = async () => {
  return await executeQuery("SELECT * from logs order by logdate desc");
}
0 голосов
/ 06 марта 2020

Сначала я бы попробовал это так:

app.get("/", async (req, res) => {
  let logs = await getLogs()
  console.log(logs) 
  res.send(logs);
});

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...