【问题标题】:Mongoose - multiple parameters in findOneMongoose - findOne 中的多个参数
【发布时间】:2016-08-19 15:54:53
【问题描述】:

这是我的路线:

router.get('/home', function (req, res) {
User.findOne({_id: req.user._id}, function (err, user) {
    if (err) return next(err);
    res.render('home', {user: user});
});
});

基本上,为了让某人查看此 /home 页面,他们需要登录,这就是 User.findOne 发挥作用的地方。它将在“用户”集合中搜索用户;如果它没有找到用户(如果用户没有登录),它将返回一个错误。否则,它将向他们显示 /home 页面。

现在,我希望我的网站有一个单独的管理员部分,只有具有管理员权限的用户才能访问该页面。我试过做这样的事情:

router.get('/admin', function (req, res) {
User.findOne({_id: req.user._id, admin: true}, function (err, user) {
    if (err) return next(err);
    res.render('admin', {user: user});
});
});

我试图让代码做的是寻找 2 个参数:用户是否登录,以及在该用户文档中他们的“管理员”是否设置为“真”。显然上面的代码不起作用,我不知道如何让它更好地工作。

编辑:我的用户架构:

var schema = mongoose.Schema;
var UserSchema = new schema ({
username: {type: String, unique: true},
email: {type: String, unique: true, lowercase: true, required: true},
password: {type: String, minlength: passMinLength, required: true},
admin: {type: Boolean, default: false},
profile: {
    firstName: {type: String, default: ''},
    lastName: {type: String, default: ''}
}
});

【问题讨论】:

  • 你能粘贴用户架构吗?
  • 感谢您的回复。我已经编辑了我的问题以包含用户架构。

标签: node.js mongoose


【解决方案1】:

查询 {_id: req.user._id, admin: true} 没有任何问题,如果 User.Schema 也包含 admin(Boolean) 字段,它应该可以工作。

此外,另一种方法是在获取 User 对象后检查 admin。

User.findOne({_id: req.user._id}, function (err, user) {

    if (err) return next(err);

    if(!user){
        //considering admin is boolean field
        if(!user.admin){
        // Not Authorised to access, do something
        }
        else{
        // User verified as Admin
         res.render('admin', {user: user});
        }
    }
    // UserId Not found, do something
});

【讨论】:

  • 我的用户方案确实包含 admin(Boolean) 字段...所以我不知道为什么它不起作用...如果具有 admin: true 的用户尝试访问管理页面,它只是显示一个错误。
  • 好的,你是对的。我写的原始查询确实有效。发生的事情是我在我的 MongoDB 中手动输入了 admin:true,我把它写成:'admin':'true',而我应该把它写成:'admin':true ......所以谢谢你你的帮助。
猜你喜欢
  • 2013-09-23
  • 2022-09-26
  • 2021-07-12
  • 2021-12-04
  • 1970-01-01
  • 2017-11-16
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多