此问题已在此处有答案:
How do I return the response from an asynchronous call?(42答案)
4小时前关闭
在这里,我创建了一个loginUser模型,它只是检查用户是否存在,代码工作正常,但我在isValidPassword
中遇到错误,即使电子邮件和密码为真,它也总是假的。
每当我尝试console.log(isValidPassword)
,它将返回undefined,同样的情况发生在validStatus
const express=require('express');
const bcrypt=require('bcrypt');
let salt;
const loginUser=async (req,res)=>{
const {email,password}=req.body;
try{
let user=await userModel.findOne({email});
salt= await bcrypt.genSalt(10);
if(!user) return res.status(400).json("invalid Username or passowrd");
let validStatus=false;
let isValidPassword = await bcrypt.compare(password,user.password,(err,result)=>{
// console.log(err);
console.log(result);
if(result) validStatus=true;
});
console.log(validStatus);
if(!isValidPassword) return res.status(400).json("invalid Username or passowrd");
const token=createToken(user._id);
res.status(200).json({_id:user.id,name:user.name,email,token});
}
catch(err)
{
console.log(err);
}
};
2条答案
按热度按时间8iwquhpp1#
您尝试同时使用
compare
的回调和Promise。只需从compare
调用中删除回调即可(参见BCrypt with promises:dz6r00yl2#
bcrypt.compare 已经返回了一个promise,所以不要将回调传递给它