我遇到了一个奇怪的问题。我在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
语句错误
答案 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"
})
}
}
});