如何 return 猫鼬查询方法中的错误?
How to return an error in a mongoose query method?
我刚刚开始使用 mongoose 查询方法,它们真的很酷。我做了一个查询方法来了解对象的所有权。如果是,它是他自己的,那么对象的值将被显示,否则它应该做一个错误,比如返回一些错误而不是其他东西。
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 });
});
//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);
}
});
}
我刚刚开始使用 mongoose 查询方法,它们真的很酷。我做了一个查询方法来了解对象的所有权。如果是,它是他自己的,那么对象的值将被显示,否则它应该做一个错误,比如返回一些错误而不是其他东西。
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 });
});
//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);
}
});
}