【发布时间】:2019-07-26 13:20:16
【问题描述】:
我的目标是包装 MySQL 查询,将参数传递给一个函数,另一个函数完成 MySQL 的工作,并返回结果。
到目前为止,这是我的代码:
//mysql lib
var mysql = require('mysql');
//database credentials
exports.pool = mysql.createPool({
connectionLimit: 50,
host: 'localhost',
user: 'root',
password: 'password',
database: '_app',
debug: false
});
//my wrapper =(
var returnResultset = exports.returnResultset = function (qry) {
return new Promise(function (resolve, reject) {
try {
mysql_.pool.getConnection(function (err, connection) {
if (err) {
console.log("Error on function returnResultset - MYSQL ERROR: " + err);
return reject(err);
}
connection.query(qry, [], function (error, results, fields) {
connection.release();
if (error) {
console.log("Error on function returnResultset - MYSQL ERROR: " + error);
return reject(error);
}
return resolve(results);
});
});
}
catch (e) {
console.log('error:' + e);
}
});
};
//wrapper function for testing purposes
var selectOneField = exports.selectOneField = function (tbl, field, pk, pkval) {
var qry_ = "SELECT " + field + " FROM " + tbl + " WHERE " + pk + " = '" + pkval + "'";
returnResultset(qry_).then(function (results) {
return results;
}, function (error) {
console.log("Error: " + error);
})
};
//...and on another page I want to be able to receive the results from the function above:
var isExpired = exports.isExpired = function (cod) {
var rtf = db_.selectOneField('view_expiredusers', 'cod', 'cod', cod);
console.log(rtf);
return rtf;
};
上面的代码返回undefined。我无法使此功能正常工作。
我试过console.log(results)。查询就像一个魅力。我唯一不能开始工作的就是从外部函数中捕获结果。
有什么想法吗?提前致谢!
【问题讨论】:
-
你也应该在你的 catch 块中做
reject(err)。 -
您没有在 selectOneField 函数中返回承诺,它必须返回 returnResultset(...) 并且您不能简单地执行 rtf = db_.selectOneField('view_expiredusers', 'cod', 'cod' , 鳕鱼); .你将不得不使用异步等待或然后
标签: javascript mysql node.js express