Bcrypt密码比较未显示结果

时间:2019-01-22 03:28:27

标签: node.js mongodb express mongoose bcrypt

我遇到了一个奇怪的问题。我在bcrypt.compare()内有一条if语句,该语句根本不会运行。

示例

bcrypt.compare(req.body.password, data.password, function (err, result) {

    if (!result || err) {
        res.status(422).json({
            message: "Wrong Password",
            status: false,
            statusCode: 422
        })
    }

});

const otherData = await findOne({
    x : req.body.x
})

if(otherdata.x == "dummy") {

    return res.status(200).json({
        message: "wohhooo"
    })
}

当我在request body中发送错误密码时,应该以{{1​​}}进行响应

但是它会跳过message: "wrong password"中的if语句,并返回bcrypt.compare()

在控制台中,我看到message: "wohhoo"指向Error: Can't set headers after they are sent.内的return语句错误

1 个答案:

答案 0 :(得分:1)

[bcrypt.compare] 1是异步函数,因此您的程序在res.status(200).json({message: "wohhooo"})之前执行bcrypt.compare

// Quick Fix
bcrypt.compare(req.body.password, data.password, function (err, result) {
    if (!result || err) {
        return res.status(422).json({
            message: "Wrong Password",
            status: false,
            statusCode: 422
        })
    } else {
        const otherData = await findOne({
            x: req.body.x
        })
        if (otherdata.x == "dummy") {
            return res.status(200).json({
                message: "wohhooo"
            })
        }
    }
});

参考: What the heck is a Callback?