这是我的代码。
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");
});
});
但是我总是收到无效的电子邮件/密码,我希望仅在循环完成且电子邮件/密码不匹配时才打印。
请帮助。
答案 0 :(得分:1)
尝试一下
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");
});
});
答案 1 :(得分:0)
您可以将setTimeout函数用于此setTimeout(()=> {//代码在此处},300)。
答案 2 :(得分:0)
我希望这会有所帮助:
router.route("/login").post((req, res) => {
const { email, password } = req.body;
Account.find().then((accounts) => {
let match = false;
for (acct of accounts) {
if (acct.email.toUpperCase() !== email.toUpperCase()) continue;
bcrypt.compare(password, acct.password, (err, result) => {
if (err) {
res.status(400).json("Error: " + err);
break;
}
res.status(200).json("Login Successful");
match = true;
break;
});
}
if (!match) res.status(400).json("Invalid email or password");
});
});