如何从node.js中的循环中断?

时间:2018-05-23 12:55:15

标签: node.js loops express

我在node.js中编写了这段代码来验证用户json的用户名和密码。问题是它是否仍然循环遍历所有用户,尽管已找到有效用户。如何在找到有效用户时中断循环?

users.forEach(function (user) {
          if(req.body.username==user.username){
              if(req.body.password==user.password){
                    console.log('validate success');
                    res.status(200).send({message:'user validation successful'});
              }
          }
          else{
               console.log('validate failed');
               res.status(404).send({message:'user validation failed'});
          }
});

2 个答案:

答案 0 :(得分:0)

您使用的功能错误。如果您要循环所有条目,请使用 forEach 。如果您需要找到子集,则使用 filter ,如果您需要只有一个结果,则使用 find https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

因此,您的代码以及其他一些改进将成为:

const loggedUser = users.find((user) => {
    return req.body.username === user.username && req.body.password === user.password
})

我知道我可以进一步缩短这一点,但现在IMO就更清楚了。

答案 1 :(得分:0)

您想要的是find匹配用户名的用户,如果找到用户名,请检查密码。这样,您还可以提供正确的错误消息,告诉用户出错了什么(用户名或密码)

const user = users.find(function (user) {
  return user.username === req.body.username
})

if (!user) {
  return res.status(404).send({ message: 'User not found' })
}

if (user.password !== req.body.password) {
  return res.status(404).send({ message: 'Wrong pasword' })
}

// everything is alright
return res.status(200).send({message:'user validation successful'})

您可以使用arrow function缩短查找次数

const user = users.find(u => (u.username === req.body.username))