NodeJS异步MySQL对连接池的调用没有返回结果

时间:2017-12-12 14:04:21

标签: mysql node.js async-await

我目前正在使用聊天机器人并尝试在NodeJs中设计新的await / async结构。

我的代码目前看起来像这样:

exports.checkUser = async function (userId, callback){
let result;
    try{
        result = await pool.query('SELECT * FROM users WHERE id = ?;', 
                [userId]);
        if(!result || result.length == 0)
        {
            return false;
        }
        else if(result.length != 0)
        {
            return true;
        }
    }
    catch(err)
    {
        console.log(err);
        callback(err, null);
    }
};

我假设我不必在使用asyc / await结构时摆弄承诺。 我在其他地方调用这个函数:

mysql.checkUser(user).then((result) =>
    {
//console for debug
      console.log(result);  
    });

嗯,我知道成功的检查非常简单,我似乎没有得到一个不错的结果。

总是在结果对象中抛出一些东西:

_callSite: Error
at Pool.query (/app/node_modules/mysql/lib/Pool.js:199:23)
at Object.exports.checkUser (/app/lib/mysql/mysql.js:49:29)
at Object.exports.checkUser (/app/lib/auth/authentication_engine.js:28:11) [...]

1 个答案:

答案 0 :(得分:2)

pool.query没有返回Promise,因此当它作为异步函数调用时执行将失败。 使用mysql2包确实是一个好主意,更多内容:https://www.npmjs.com/package/mysql2#using-promise-wrapper