pool.query 不适用于 async/await
pool.query is not working with async/await
我是 nodejs 的新手,尝试使用 this 库从 mysql 读取数据。我正在使用快速框架。
这是我的 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;
}
}
以下内容由 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
}
有人可以帮我解决这个问题吗?
NPM 上的 mysql
库不支持承诺,因此不能与 await
一起使用。您将需要实现对 mysql 的承诺支持的多个包装器之一或制作您自己的包装器。 NPM 上的一个流行模块是一个名为 mysql2
的分支(他们现在正在与 mysqljs 组织协调以与 mysql
项目共享公共代码)。使用 mysql2
你可以:
const mysql = require('mysql2/promise');
然后,您可以使用 async/await
进行 mysql 调用。
我是 nodejs 的新手,尝试使用 this 库从 mysql 读取数据。我正在使用快速框架。
这是我的 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;
}
}
以下内容由 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
}
有人可以帮我解决这个问题吗?
NPM 上的 mysql
库不支持承诺,因此不能与 await
一起使用。您将需要实现对 mysql 的承诺支持的多个包装器之一或制作您自己的包装器。 NPM 上的一个流行模块是一个名为 mysql2
的分支(他们现在正在与 mysqljs 组织协调以与 mysql
项目共享公共代码)。使用 mysql2
你可以:
const mysql = require('mysql2/promise');
然后,您可以使用 async/await
进行 mysql 调用。