javascript - promise 问题 : Trying to wrap mysql queries to use it on NodeJS/Express

标签 javascript mysql node.js express

我的目标是包装 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)。查询就像一个魅力。我唯一无法开始工作的是从外部函数中获取结果。

有什么想法吗?提前致谢!

最佳答案

您应该返回 promise 并将其链接到 isExpired 函数中。

//wrapper function for testing purposes
var selectOneField = exports.selectOneField = function (tbl, field, pk, pkval) {

var qry_ = "SELECT  " + field + " FROM " + tbl + " WHERE " + pk + " = '" + pkval + "'";

return returnResultset(qry_);

};

//...and on another page I want to be able to receive the results from the function above:

var isExpired = exports.isExpired = function (cod) {

return db_.selectOneField('view_expiredusers', 'cod', 'cod', cod)



};

当您在其他文件中调用 isExpired 时,您应该使用 promise 的 then 方法并返回结果。做如下

var cod_customer = 1;
var isexpired;
 isExpired(cod_customer).then(function (results) {
        isexpired = results;
        console.log(isexpired);
    }, function (error) {
        console.log("Error: " + error);
    });

关于javascript - promise 问题 : Trying to wrap mysql queries to use it on NodeJS/Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54996629/

相关文章:

javascript - 当我返回页面时 sessionStorage 不存在

javascript - 如何检查 Javascript 对象值是否为数组且不为空

javascript - 如何控制 Angular Material 中的 md-select 下拉位置

javascript - 递归过滤 bool 键的数据

mysql - 为什么 Mysql 查询返回 OK,当它预期从减法中得到负 INT 时?

PHP 不执行并且不向数据库添加信息

mysql - SQL 选择除

javascript - 使用 gulp 时显示 javascript 错误

javascript - Joi - 验证 mysql 日期时间格式的字符串

javascript - 在 for 循环中顺序执行 promise