最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

这个逻辑出了什么问题?节点JS

IT培训 admin 4浏览 0评论

这个逻辑出了什么问题?节点JS

我用Node JS构建了一个迷你cms应用程序。我允许用户编辑自己的个人资料和管理员来编辑所有个人资料。我对逻辑有一个奇怪的问题 - 如果我使用这种语法,当管理员试图编辑其他用户的配置文件时,我会收到错误(401)

if (!loggedUser.isAdmin || foundUser.id !== loggedUser.id) {
  res.status(401).json();
} else {
  // Save Updated User
  foundUser.username = req.body.username;
  foundUser.birthday = req.body.birthday;
  foundUser.personalWeb = req.body.personalWeb;
  foundUser.location = req.body.location;
  foundUser.save().then(() => res.status(200).json(200));
}

但是,如果我使用此语法,权限工作正常:

if (loggedUser.isAdmin || foundUser.id === loggedUser.id) {
  // Save Updated User
  foundUser.username = req.body.username;
  foundUser.profileImg = req.body.profileImg;
  foundUser.personalWeb = req.body.personalWeb;
  foundUser.location = req.body.location;
  foundUser.save().then(() => res.status(200).json(200));
} else {
  res.status(401).json();
}

有人可以解释这两个条件之间的区别吗?

回答如下:

!loggedUser.isAdmin || foundUser.id !== loggedUser.idloggedUser.isAdmin || foundUser.id === loggedUser.id不是彼此的布尔逆。

第一个是说“如果用户不是管理员,或者找到的用户的id与登录用户的id不匹配”。在管理员的情况下,您会希望他们的ID与找到的用户的ID不匹配。

我认为你的第二个代码块更容易阅读,你应该保留它,但如果你想首先做负面条件,它将是:

!loggedUser.isAdmin && foundUser.id !== loggedUser.id

即:“如果登录用户不是管理员,并且找到的用户ID与登录用户的ID不匹配。”

这也是布尔逆:

!(loggedUser.isAdmin || foundUser.id === loggedUser.id)
// expands to
!loggedUser.isAdmin && foundUser.id !== loggedUser.id

我很难找到好的文档或布尔否定的描述,但是这篇文章很好地解释了我的想法:http://www.math.toronto.edu/preparing-for-calculus/3_logic/we_3_negation.html

虽然您可以简化布尔表达式,但我认为最好以最适合您和您的开发团队的方式编写它们,因此我建议您使用第一个块,因为它易于阅读。如果做不到这一点,请对表达式试图完成的内容发表评论。

这个逻辑出了什么问题?节点JS

我用Node JS构建了一个迷你cms应用程序。我允许用户编辑自己的个人资料和管理员来编辑所有个人资料。我对逻辑有一个奇怪的问题 - 如果我使用这种语法,当管理员试图编辑其他用户的配置文件时,我会收到错误(401)

if (!loggedUser.isAdmin || foundUser.id !== loggedUser.id) {
  res.status(401).json();
} else {
  // Save Updated User
  foundUser.username = req.body.username;
  foundUser.birthday = req.body.birthday;
  foundUser.personalWeb = req.body.personalWeb;
  foundUser.location = req.body.location;
  foundUser.save().then(() => res.status(200).json(200));
}

但是,如果我使用此语法,权限工作正常:

if (loggedUser.isAdmin || foundUser.id === loggedUser.id) {
  // Save Updated User
  foundUser.username = req.body.username;
  foundUser.profileImg = req.body.profileImg;
  foundUser.personalWeb = req.body.personalWeb;
  foundUser.location = req.body.location;
  foundUser.save().then(() => res.status(200).json(200));
} else {
  res.status(401).json();
}

有人可以解释这两个条件之间的区别吗?

回答如下:

!loggedUser.isAdmin || foundUser.id !== loggedUser.idloggedUser.isAdmin || foundUser.id === loggedUser.id不是彼此的布尔逆。

第一个是说“如果用户不是管理员,或者找到的用户的id与登录用户的id不匹配”。在管理员的情况下,您会希望他们的ID与找到的用户的ID不匹配。

我认为你的第二个代码块更容易阅读,你应该保留它,但如果你想首先做负面条件,它将是:

!loggedUser.isAdmin && foundUser.id !== loggedUser.id

即:“如果登录用户不是管理员,并且找到的用户ID与登录用户的ID不匹配。”

这也是布尔逆:

!(loggedUser.isAdmin || foundUser.id === loggedUser.id)
// expands to
!loggedUser.isAdmin && foundUser.id !== loggedUser.id

我很难找到好的文档或布尔否定的描述,但是这篇文章很好地解释了我的想法:http://www.math.toronto.edu/preparing-for-calculus/3_logic/we_3_negation.html

虽然您可以简化布尔表达式,但我认为最好以最适合您和您的开发团队的方式编写它们,因此我建议您使用第一个块,因为它易于阅读。如果做不到这一点,请对表达式试图完成的内容发表评论。

发布评论

评论列表 (0)

  1. 暂无评论