【问题标题】:Express and Mysql2 returning results from db queryExpress 和 Mysql2 从数据库查询返回结果
【发布时间】:2022-01-23 06:22:40
【问题描述】:

我正在尝试从我的 get_salt_and_hash() 函数返回结果(一个 json 对象数组)。然后我想在另一个函数中使用结果。 (在这种情况下,结果数组的长度为 1。)

但是,在我的另一个函数中调用 get_salt_and_hash() 之后,当我尝试打印对象时,我得到了未定义的结果。我不确定为什么,因为原始函数中的 console.log(results) 有效。谁能帮帮我。

const get_salt_and_hash = (email) => {
const query = `SELECT p_salt, p_hash FROM USERS_TABLE WHERE email= "${email}"`;
db.query(query, (err, results) => {
    if (!err) {
        console.log(results);
        return results[0];
    } else {
        throw err
    }
})}


const verify_user = (email, password) => {

let result_obj = get_salt_and_hash(email);
console.log(result_obj);
// const p_hash = result_obj['p_hash'];
// const p_salt = result_obj['p_salt']

}

我怀疑它与异步代码有关,因为进行 db 查询需要时间,但我对异步 javascript 几乎一无所知,所以我认为最好问问其他人。

提前致谢!

【问题讨论】:

    标签: javascript mysql node.js express


    【解决方案1】:

    你是对的,从数据库中获取结果需要时间,所以只需承诺 query() 函数,这样你就可以在 query() 函数调用上使用 await,我在下面修改了你的代码并承诺了 query() .

    // Not tested.
    const util = require('util');
    
    const get_salt_and_hash = async (email) => {
        const query = `SELECT p_salt, p_hash FROM USERS_TABLE WHERE email= "${email}"`;
    
        const promisifiedQuerFunction = util.promisify(db.query).bind(db);
        let results = await promisifiedQuerFunction(query);
        return results[0];
    }
    
    const verify_user = async (email, password) => {
    
        let result_obj = await get_salt_and_hash(email);
        console.log(result_obj);
    }    
    

    你可以从here学习如何编写异步函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多