Mongoose - findOne

时间:2016-04-26 02:50:41

标签: node.js mongoose

这是我的路线:

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});
});
});

基本上,为了让某人查看此/主页,他们需要登录,这是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个参数:用户是否已登录,以及该用户是否记录了他们的“管理员”信息。设置为' true'。显然上面的代码不起作用,我也不知道如何让它更好地工作。

编辑:我的用户架构:

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: ''}
}
});

1 个答案:

答案 0 :(得分:2)

查询{_id: req.user._id, admin: true}没有错,如果User.Schema也包含admin(布尔)字段,它应该有效。

此外,替代方法是在获得User对象后检查管理员。

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
});