假设我们在数据库中存储了一个任务,我们想删除它并检查它是否被删除。当我拥有在一个模块中访问数据库的所有代码时,一切正常。喜欢这个
task.spec.js模块
task.doFindByIdAndDelete( id )
.then (function( deletedTask ){
console.log( JSON.stringify(deletedTask.name, null, 2)) ;
})
.fail (function( err ){
console.log( err ) ;
})
task.js模块
var doFindByIdAndDelete = function(id){
var deferred;
deferred = Q.defer();
TaskModel.findByIdAndRemove(id, function(err, modelDeleted){
if(err){
var error = "The model could not be deleted: ";
deferred.reject(error + err);
}
deferred.resolve(modelDeleted);
});
return deferred.promise;
};
使用此代码,我可以毫无问题地打印'deletedTask'的属性'name'。但结果是'doFindByIdAndDelete'方法适用于数据库中的所有元素,我想创建一个包含所有公共方法的主函数类,然后'task'将是这个master类的一个实例。代码是:
task.spec.js模块
task.doFindByIdAndDelete( id )
.then (function( deletedTask ){
console.log( JSON.stringify(deletedTask.name, null, 2)) ;
})
.fail (function( err ){
console.log( err ) ;
})
MasterModel.js模块
var MasterModel = function(Model){
this.Model = Model;
};
MasterModel.prototype.doFindByIdAndDelete = function(id){
var deferred;
deferred = Q.defer();
Model.findByIdAndRemove(id, function(err, modelDeleted){
if(err){
var error = "The model could not be deleted: ";
deferred.reject(error + err);
}
deferred.resolve(modelDeleted);
});
return deferred.promise;
};
task.js模块
var task = new ModelLogic(TaskModel);
在这个版本的代码中,当我从task.spec.js调用'doFindByIdAndDelete'时,我只能通过模型的_doc属性访问deletedTask的name属性,比如deletedTask._doc.name
这是一个错误吗?我的代码中有什么问题吗?我看过另外一些有类似问题的人发帖,比如
https://groups.google.com/forum/#!searchin/mongoose-orm/_doc/mongoose-orm/aq7rwxUnHTE/HoGXj6UTcu4J
但我找不到解决方案。 一些想法!!!
由于 托尼
答案 0 :(得分:1)
解决方案只是添加" 这个"之前' Model.findByIdAndRemove(id,function(err,modelDeleted){... '正如我在评论中详述的那样。
this.Model.findByIdAndRemove(id, function(err, modelDeleted){…