【问题标题】:ExpressJS MySql Pool Connection Query ReturnExpressJS MySql 池连接查询返回
【发布时间】:2021-09-26 12:20:10
【问题描述】:

我刚刚开始使用 ExpressJS。所以这里 console.log 有效,所以如果我打电话,我会在打印的终端结果数据集中看到它。但是,它不会将其作为响应返回。我做了 console.log 并返回,但仍然没有得到响应的数据..

index.js

...
app.get("/", async (req, res) => {
  let data = await queries();
  res.json(data);
});
...

也试过了

...
app.get("/", (req, res) => {
  res.json(queries());
});
...

queries.js

function main(sql) {
  return pool.getConnection((err, connection) => {
    if (err) throw err;
    return connection.query(sql, (errt, rows) => {
      connection.release(); // return the connection to pool
      if (errt) throw err;
      console.log(rows);
      return rows;
    });
  });
}
function queries() {
  let Q = "SELECT * FROM `items`";
  return main(Q);
}

【问题讨论】:

    标签: javascript mysql node.js api express


    【解决方案1】:

    如果您确实在终端中看到结果,我相信问题出在函数 main() 中。您在 index.js 文件中的函数似乎没问题。该问题可能是由于未从 query.js 文件中的 main() 函数发回的承诺。你需要做两件事 -

    1. 将 main() 的功能包装在 Promise 中并返回该 Promise。 Promise 对象的回调函数接受resolve(使用this返回结果)和reject(使用this返回错误)。

    2. 由于 main() 将返回一个 promise,因此您的 queries() 函数需要异步,因此需要等待 main() 的返回。

    我附上了一张图片来展示我是如何为 DNS 查找功能实现的。你会发现一些相似之处。

    // Notice the resolve and reject are functions
    function main(sql) {
    
        return new Promise((resolve, reject) => {
           pool.getConnection((err, connection) => {
            if (err) throw err;
             connection.query(sql, (errt, rows) => {
              connection.release(); // return the connection to pool
              if (errt) throw err;
              console.log(rows);
              resolve(rows);
            });
          });
        });
    }
    
    
    async function queries() {
      let Q = "SELECT * FROM `items`";
      let result = await main(Q);
      return result;
    }

    我相信这应该可行。试试看,祝你好运!

    【讨论】:

    • 不客气。也看看JS中的异步编程,刚开始做expressJs的时候不知道,吃了不少苦。
    猜你喜欢
    • 2021-05-10
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2015-03-28
    相关资源
    最近更新 更多