我在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'});
}
});
答案 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))