我是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调用一起使用。