【问题标题】:pool.query is not working with async/awaitpool.query 不适用于 async/await
【发布时间】:2021-11-21 02:49:15
【问题描述】:

我是 nodejs 的新手,尝试使用 this 库从 mysql 读取数据。我正在使用 express 框架。

这是我的 router/index.js 文件中的代码

router.get('/', async function(req, res, next) {
  console.log(query);
  let data = await query();
  console.log(data);
  res.send();
});

从db读取数据的代码(连接db没有问题)。

const query = async (table, fields ) => {
    try {
        const results = await pool.query('SELECT * FROM country limit 1');
        return results
    } catch(err) {
        return err;
    }
}

console.log(data) 正在记录以下内容

<ref *1> Query {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  _callback: undefined,
  _callSite: Error
      at Pool.query (/Users/siva/Projects/api/node_modules/mysql/lib/Pool.js:199:23)
      at query (/Users/siva/Projects/api/db/index.js:4:36)
      at /Users/siva/Projects/api/routes/index.js:7:20
      at Layer.handle [as handle_request] (/Users/siva/Projects/api/node_modules/express/lib/router/layer.js:95:5)
      at next (/Users/siva/Projects/api/node_modules/express/lib/router/route.js:137:13)
      at Route.dispatch (/Users/siva/Projects/api/node_modules/express/lib/router/route.js:112:3)
      at Layer.handle [as handle_request] (/Users/siva/Projects/api/node_modules/express/lib/router/layer.js:95:5)
      at /Users/siva/Projects/api/node_modules/express/lib/router/index.js:281:22
      at Function.process_params (/Users/siva/Projects/api/node_modules/express/lib/router/index.js:335:12)
      at next (/Users/siva/Projects/api/node_modules/express/lib/router/index.js:275:10),
  _ended: false,
  _timeout: undefined,
  _timer: Timer { _object: [Circular *1], _timeout: null },
  sql: 'SELECT * FROM country limit 1',
  values: undefined,
  typeCast: true,
  nestTables: false,
  _resultSet: null,
  _results: [],
  _fields: [],
  _index: 0,
  _loadError: null,
  [Symbol(kCapture)]: false
}

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: mysql node.js express pool


    【解决方案1】:

    NPM 上的 mysql 库不支持 Promise,因此不适用于 await。您将需要几个实现对 mysql 的承诺支持或自己制作的包装器之一。 NPM 上一个流行的模块是一个名为 mysql2 的分支(他们现在正在与 mysqljs 组织协调以与 mysql 项目共享公共代码)。使用mysql2,您可以:

    const mysql = require('mysql2/promise');
    

    然后,您可以在 mysql 调用中使用async/await

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2021-08-15
      • 2019-10-24
      • 2018-07-10
      • 2021-06-18
      • 2019-05-30
      • 2021-05-10
      • 1970-01-01
      • 2021-09-11
      相关资源
      最近更新 更多