2017-05-05 53 views
0

我刚刚开始使用猫鼬查询方法,他们真的很酷。我做了一个查询方法来了解对象的所有权。如果是,那么它是他自己的,那么对象的值将被显示,否则它应该执行一个错误,如返回一些错误,而不是别的。如何在猫鼬查询方法中返回错误?

someSchema.query.isOwner = function(user) { 
    if (user.admin) 
     return this; 
    /* I know this will not work please suggesta solution for this too */ 
    else if (user._id === iShouldbeAbleToAccessTheObjectHere._id) 
     return this; 
    else 
     // Put this into the error of exec 
     return new Error('Permission denied!'); 
}; 

// This is how I'll use it 
SomeModel 
    .findById(someId) 
    .isOwner(currentUser) 
    .exec((err, result) => { 
     if (err) 
     res.json({ error : err }); 
     res.json({ data : result }); 
    }); 

回答

1
//model.js 
var ObjectId = require('mongoose').Types.ObjectId; 
var someModel = new mongoose.model('somemodel',someSchema); 

someModel.findByIdAndCheckOwnership = function(id, callback){ 

    this.find({ _id : new ObjectId(id), admin : true}, function(err, user){ 
     if(err){ 
      callback('Your Custom Error Msg', null); 
     } 
     else{ 
      callback(null, user); 
     } 
    }); 
} 

//use of model in some other.js 
SomeModel.findByIdAndCheckOwnership(id, function(err, user){ 

    if(err){ 
     res.json({ error :err }); 
    } 
    else{ 
     res.json({ user : user }); 
    } 
}); 

//populate 
someModel.findByIdAndCheckOwnership = function(id, callback){ 

    this.find({ _id : new ObjectId(id), admin : true}).populate('your_population_fields').exec(function(err, user){ 
     if(err){ 
      callback('Your Custom Error Msg', null); 
     } 
     else{ 
      callback(null, user); 
     } 
    }); 
} 
+0

有什么办法,我可以设置回调的错误? –

+0

@Johnfoo我已经更新了答案。请检查:) –

+0

简单易行,非常感谢您的帮助! –