2014-01-27 66 views
1

我想換我自己static創建方法裏面的貓鼬Model.create方法:裹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之前多次記錄CREATING TASK

我懷疑this.model('Task').create(task)調用我的自定義靜態create方法,而不是貓鼬create方法,從而導致無限循環。例如,如果我將自定義方法重命名爲myCreate,則一切均按預期工作。

我怎麼能仍然有我的create方法,但在裏面叫它貓鼬create呢?

回答

1

你應該能夠使用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.model('Task')

+1

酷,這是真棒:)謝謝! –