Mongoose.js:找到用户,然后检查用户的值

时间:2018-07-06 09:06:31

标签: javascript node.js express mongoose

我正在尝试检查用户是否是管理员,但无法检索该值。当我登录console.log(user)时,我得到了所有这些值:

email: 'testone@hotmail.com',
password:'$2b$10$mMyZkF3y8wxFTXUNgd/giuDvbaXfTFxlYECQmHgvAHDd4NB5CNpsq',
role: 'admin'

现在如何检查用户角色是否===成为“管理员”? 我尝试做user.rolereq.userData.role === 'admin',但似乎找不到它,因为它告诉我未定义。

router.delete("/:id",
  authCheck,
  (req, res, next) => {
    User.find()
      .then(user => {
        console.log('*this log gives me undefined*', user.role);
        if (!req.userData.role === 'admin') {
          Post.deleteOne({
            _id: req.params.id,
            poster: req.userData.userId,
          }).then(result => {
            if (result.n > 0) {
              res.status(200).json({
                message: "Deletion successful!"
              });
            } else {
              res.status(401).json({
                message: "Not authorised!"
              });
            }
          })
        }
      })
  });

我知道你们中的大多数人都会发现这个超级简单,但是我只是后端的新手,所以我选择将其发布为修复它的最后希望,非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为User.find()在给您一系列文档,而不是文档的对象。

尝试user[0].role

!req.userData.role === 'admin'也是一个问题。
它应该是req.userData.role !== 'admin'!(req.userData.role === 'admin')

此外,您的应用似乎已经在从数据库加载用户并将其附加到reqpassport.js或其他方式必须这样做。在这种情况下,您实际上不需要再次执行User.find(),因为它已经由auth机制完成。这仅与请求者有关,如果您要为其他用户加载其他内容,请忽略此骚扰。

此外,如果您只想查找一条与查询匹配的记录,请尝试使用findOne而不是find