Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 密码错误时请求被卡住(异步/等待)_Javascript_Node.js_Express - Fatal编程技术网

Javascript 密码错误时请求被卡住(异步/等待)

Javascript 密码错误时请求被卡住(异步/等待),javascript,node.js,express,Javascript,Node.js,Express,所以,我对async await还很陌生。但我想我应该在一个项目中实现它,看看它到底是如何工作的,并且完全理解。但是我被卡住了&无法理解到底发生了什么 因此,在我的PERN应用程序中,我试图记录一个用户,因此请求来自前端,带有用户名和密码,然后我使用findOne(sequelize)方法查找用户是否存在,并对密码执行相同操作,但使用bcrypt compare函数进行比较 但是,当用户输入错误的电子邮件或密码时,整个响应不知何故被卡住了,因为我得到的响应是500,尽管我已经处理了此类事件的错误

所以,我对async await还很陌生。但我想我应该在一个项目中实现它,看看它到底是如何工作的,并且完全理解。但是我被卡住了&无法理解到底发生了什么

因此,在我的PERN应用程序中,我试图记录一个用户,因此请求来自前端,带有用户名和密码,然后我使用findOne(sequelize)方法查找用户是否存在,并对密码执行相同操作,但使用bcrypt compare函数进行比较

但是,当用户输入错误的电子邮件或密码时,整个响应不知何故被卡住了,因为我得到的响应是500,尽管我已经处理了此类事件的错误

我是说它被卡住了,因为我在findOne和compare函数的底部添加了一个控制台,它们没有登录,但是只要电子邮件或密码正确,就会收到响应

 const { email, password } = req.body;

  console.log({ email, password });

  const user = await User.findOne({ where: { email } });

  const passwordMatch = await bcyptjs.compare(password, user.password);
  console.log('Cant Reach here when the fields are incorrect', password);
  console.log('Cant Reach here when the fields are incorrect', user.password);


  if (!user &&  !passwordMatch) {
    return next({
      message: 'Username or Password is incorrect.',
      statusCode: 400,
    });
  }
我想你有打字错误(bcypt vc bcrypt):) 我认为当字段不匹配时,该方法会拒绝。因此,您应该将比较包装在try/catch块中。 或者您可以使用同步版本

bcrypt.compareSync(password, user.password);

这将返回true或false

您的代码缺少处理错误的try-catch块

    const { email, password } = req.body;
    
      console.log({ email, password });

     try{

      const user = await User.findOne({ where: { email } });
    
      const passwordMatch = await bcyptjs.compare(password, user.password);
      console.log('Cant Reach here when the fields are incorrect', password);
      console.log('Cant Reach here when the fields are incorrect', user.password);
    
    }catch(e){
    console.log(e.message)
    console.log(e.statusCode)
}

是否有任何未处理的拒绝承诺注销?如果(!user | |!passwordMatch),则应为或
{
我以某种方式修复了它,我所做的是在检查用户和密码后添加了!用户,同时检查两者不起作用,不知道为什么,奇怪的是,我在mongoose中做了同样的事情,效果很好..我不认为这是问题,因为导入的名称是相同的,虽然我更改了它,但仍然没有运气,并且或者处理错误我有异步处理程序中间件,asyncCatch=(fn)=>(req,res,next)=>Promise.resolve(fn(req,res,next)).catch(next);