首页 > 解决方案 > 如何仅在循环(其中包含函数)完成时运行语句?

问题描述

这是我的代码。

router.route("/login").post((req, res) => {
  const email = req.body.email;
  const password = req.body.password;
  Account.find().then((account) => {
    account.forEach((eachAcc) => {
      if (eachAcc.email.toUpperCase() === email.toUpperCase()) {
        bcrypt.compare(password, eachAcc.password, function (err, result) {
          if (result == true) res.status(200).json("Login Successful");
          else if (err) res.status(400).json("Error: " + err);
        });
      }
    });
    res.status(400).json("Invalid email or password");
  });
});

但是我总是收到无效的电子邮件/密码,我希望仅在循环完成并且电子邮件/密码不匹配时才打印它。

请帮忙。

标签: javascriptnode.js

解决方案


试试这个

    router.route("/login").post((req, res) => {
      const { email, password } = req.body;
      Account.find().then((account) => {
      let acc = account.find(
         (eachAcc) => eachAcc.email.toUpperCase() === 
            email.toUpperCase()
         );
      if (acc) {
         bcrypt.compare(password, acc.password, function (err, result) 
          {
            if (err) res.status(400).json("Error: " + err);
            else if (result) res.status(200).json("Login Successful");
            else res.status(400).json("Invalid password");
          });
         } else res.status(400).json("Invalid email");
       });
    });

推荐阅读