pool.query无法使用async/await



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

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

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

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

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

控制台正在记录以下内容。log(数据(

<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
}

有人能帮我克服这个问题吗?

NPM上的mysql库不支持promise,因此不能与await一起使用。您需要几个实现对mysql的promise支持的包装器中的一个,或者自己制作。NPM上一个流行的模块是一个名为mysql2的fork(他们现在正在与mysqljs组织协调,与mysql项目共享公共代码(。使用mysql2,您可以执行以下操作:

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

然后,您可以将async/await与mysql调用一起使用。

最新更新