2013-10-31 28 views
1

我想定義我自己的靜態/方法保存我的模型的文檔。Mongoose/NodeJS定義靜態/保存文檔的方法

我已經試過這樣:

userSchema.statics.saveUser = function(data, callback){ 
    data.save(callback); 
}; 

它說data.save()不是一個函數。它不識別該功能。

然後我試圖此

userSchema.statics.saveUser = function(data, callback){ 
    data = new userSchema(data); 
    data.save(callback); 
}; 

userSchema不是一個函數。

回答

5

方法和靜態不一樣。前者在文檔(模型實例)上找到,而後者在模型上。如果上述預期被用作一個靜態的,創建一個用戶或什麼的,你會:

userModel.saveUser(); 

不過,我實在看不出有什麼好,因爲你不傳遞任何數據,會做。如果改爲創建它作爲一種方法它是這樣的:

userSchema.methods.saveUser = function(callback){ 
    user.save(callback); 
}; 

你會說它是這樣的:

var doc = new userModel(); 
// Set stuff 
doc.saveUser(); 

不知道你真正想做的事,很難說哪種方法是什麼最好在你的情況。

+0

我在'user = new this()'=>「對象不是函數」時得到一個錯誤「 – user1772306

+0

哦,對不起,它不需要運行新的this(),因爲您已經創建了一個新的文檔。我會編輯我的答案。 –

2

靜使用,當你想要做的模型相關的東西(如「findAllByFirstName」) 他們不是用模型的實例進行交互(用戶將模型的實例)

如果您想要將模型的實例保存到mongo中,那麼方法就是要走的路。

+0

如何將這樣的方法是什麼樣子? – user1772306

+0

呃,.save ?! - http://mongoosejs.com/docs/api.html#model_Model-save – Alex

1

可能是你想做的事somethig這樣的:

schema.statics.user = function() { 
    var model = this.model("user"); 
    return { 
     login:require('./resources/user/login.js'), 
     signin:require('./resources/user/signin.js') 
    } 
} 
var model = mongoose.model("<name>",schema); 
var user = model.user(); 
user.login(...) 
user.signin(...)