我正在使用:mysql2我想创建通用查询功能模块,我将在任何其他模块中使用。
我的app.js:
//globals include
options = require('./options'); //DB settings
db = require('./lib/db'); //DB Driver
async function init(){
var result = await db.query("SELECT * FROM log");
console.log(result);
}
init();
我的db.js:
const { resolve } = require("bluebird");
const DataBase = require("mysql2"); // import the class
const pool = DataBase.createPool({
connectionLimit: 50,
host: options.db_host,
user: options.db_login,
database: options.db_name,
password: options.db_password
}).promise();
module.exports.query = async function (sql) {
const connection = await pool.getConnection();
return connection.query(sql)
.then(result =>{
//console.log(result[0]);
return result[0];
})
.catch(err =>{
console.log(err);
})
.then(() => connection.release());
}
当我启动app.js时,我得到:
2022-12-23T01:20:49.362Z
undefined
但如果我在db.js中使用这段代码,我看到,代码工作正常(他在DB的控制台日志中显示行):
module.exports.query = async function (sql) {
const connection = await pool.getConnection();
return connection.query(sql)
.then(result =>{
console.log(result[0]);
//return result[0];
})
.catch(err =>{
console.log(err);
})
.then(() => connection.release());
}
1条答案
按热度按时间vuktfyat1#
您没有在所有
.then()
链上返回connection.query
的结果。是的,承诺链比基于回调的API更好,但如果您有承诺,请使用async/await
。这是我从你的代码中创建的一个小示例代码。它使用了我的MySQL数据库,所以查询不是针对你的表。
使用承诺链
数据库. js
索引. js
如您所见,您需要从第一个
then()
返回,以便在第二个then()
中获得结果,然后,从第二个then()
返回。使用异步/等待
数据库. js
简单多了,对吧?
为了完整起见,我的
config.js
是wj-config的一个实现。更新
抱歉,我忘了告诉您,我是在ES模块而不是CommonJS模块中编写此代码的,这是有一个重要原因的:我可以在任何地方使用
await
。我不需要init()
函数。让我们规范化在ES模块中编写服务器端代码。:-)