【问题标题】:Can't seem to fix undefined await result似乎无法修复未定义的等待结果
【发布时间】:2021-06-10 19:43:27
【问题描述】:

我需要将密码与 Bcrypt 库进行比较。

这是我的代码:

bcrypt.js

const bcrypt = require('bcrypt');
const saltRounds = 10;

var Bcrypt = () => {

}

Bcrypt.encrypt = async function(password) {
    const hashedPassword = await bcrypt.hash(password, saltRounds)
    return hashedPassword
}

Bcrypt.compare = async function(password, hashed_password) {
    await bcrypt.compare(password, hashed_password, function(err, result) {
        return result;
    });
}

module.exports = Bcrypt;

userMethods.js

const Bcrypt = require('../../global-functions/bcrypt');

var login = async(req) => {
    var user = {
        username: req.body.username,
        password: req.body.password
    }
    if (!user.username || !user.password) {
        return ({ error: "Login details are required to continue." });
    }
    return new Promise((resolve, reject) => {
        db.query("SELECT name,username,email,password FROM users WHERE username = ?", [req.body.username], function(err, rows) {
            if (err) {
                console.log("error: ", err);
                reject(err);
            } else {
                var compared_result = Bcrypt.compare(user.password, rows[0].password); // returns **undefined**
            }

            if (compared_result) {
                resolve({ success: compared_result, username: rows[0].username });
            } else {
                resolve({ error: "wrong username or password!" });
            }
        });
    });
}

当我尝试在 Bcrypt.compare 之前添加 await 时,我收到“await 仅在异步函数中有效”错误。

我将不胜感激。

【问题讨论】:

    标签: node.js express asynchronous async-await


    【解决方案1】:

    你想把它放在这个 Bcrypt.compare 之前

       Bcrypt.compare = async function(password, hashed_password) {
            await bcrypt.compare(password, hashed_password, function(err, result) {
                return result;
            });
        }
        
    

    然后你必须把这段代码写到一个外部函数中并在那里给async然后在里面使用await

    async function()
    {
           await Bcrypt.compare = async function(password, hashed_password) {
                await bcrypt.compare(password, hashed_password, function(err, result) {
                    return result;
                });
            }
    }
            
    

    我认为这可能会解决您的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2018-05-25
      • 2019-02-25
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多