在自定义静态创build中包装Model.create
我想在我自己的静态创build方法中包装Mongoose Model.create方法:
// File: Task.js var mongoose = require('mongoose'); var Schema = mongoose.Schema; var taskSchema = mongoose.Schema({ name: String }); // Custom static create method taskSchema.statics.create = function (task) { console.log('CREATING TASK'); return this.model('Task').create(task); // should call Mongoose `create`, not my custom static. }; module.exports = mongoose.model('Task', taskSchema);
用法如下:
// Usage: var Task = require('Task.js'); var promise = Task.create(taskObject); // call custom static `create`.
但是这不起作用。 它在返回RangeError: Maximum call stack size exceeded
之前多次loggingCREATING TASK
RangeError: Maximum call stack size exceeded
。
我怀疑this.model('Task').create(task)
调用我的自定义静态create
方法,而不是mongoosecreate
方法,从而导致无限循环。 例如,如果我将自定义方法重命名为myCreate
,则一切正常。
我怎么能仍然有我的create
方法,但在里面调用mongoosecreate
?
你应该可以使用Function.prototype.call()
来调用Model.create()
函数和你需要的模型:
taskSchema.statics.create = function (task) { console.log('CREATING TASK'); return mongoose.Model.create.call(this.model('Task'), task); };
所以这将调用mongoose.Model.create(task)
并将函数调用的“this”设置为this.model('Task')
。