Promise在nodejs中返回undefined [duplicate]

pgvzfuti  于 2023-06-29  发布在  Node.js
关注(0)|答案(2)|浏览(153)

此问题已在此处有答案

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);
       }
};
8iwquhpp

8iwquhpp1#

您尝试同时使用compare的回调和Promise。只需从compare调用中删除回调即可(参见BCrypt with promises:

let isValidPassword = await bcrypt.compare(password,user.password)
dz6r00yl

dz6r00yl2#

bcrypt.compare 已经返回了一个promise,所以不要将回调传递给它

相关问题