2013-03-16 29 views
0

我在模式上定義了一個實例方法,但似乎無法訪問它。在詳述之前,我會說我已經閱讀[這個問題](Mongoose instance method is undefined),它有同樣的問題,但我的根本原因必須不同。在將模型連接到名稱之前,我定義了所有實例方法。mongoose實例方法未定義在正確排序方法定義和模式命名之後

首先,我所定義的架構,然後定義一個實例方法: AccountSchema.methods.addFunds =函數(amountToAd,回調){// 做一些東西以添加資金 返回回調(); }

在該文件的底部,我的名字模式相關聯: VAR出口= module.exports =帳戶= mongoose.model( '帳戶',AccountSchema);

爲了記錄,就在關聯模式和名稱之前,我檢查並確保AccountSchema.methods具有我的實例方法。

後來,我用Account.findOne獲取帳戶的一個實例:

AccountSchema.statics.login = function(email, password, callback) { 
Account.findOne({ email:email}, function(err, doc){ 
     if(err) { 
      console.log(err, null); 
     } 

     // below is just some stuff to see if the doc is associated to the schema 
     if(doc) { 
      var keys = Object.keys(doc.schema); 
      for(var propertyName in doc.schema) { 
      console.log(propertyName + ": " + doc[propertyName]); 
     } 
     // blah, do some other stuff 
     callback(doc); 
    } 
} 

我包括上面的片斷,因爲它看起來像當時,我從我的數據庫中取出的帳戶,它不再有任何實例方法。

最後,當我嘗試調用doc.addFunds,我得到:

TypeError: Object #<Object> has no method 'addFunds' 

我會很感激的任何幫助或使用實例方法完全完整的貓鼬架構定義的鏈接。

+0

例如:https://github.com/LearnBoost/mongoose/blob/master/examples/doc-methods.js – aaronheckmann 2013-03-30 20:37:02

回答

0

它應該是這樣的呢?

AccountSchema.statics.login = function(email, password, callback) { 
    Account.findOne({ email:email}, function(err, doc){ 
     if(err) { 
      console.log(err, null); 
     } 

     if(doc) { 
      var keys = Object.keys(doc.schema); 
      for(var key in keys) { 
       console.log(key + ": " + doc.schema[key]); // I changed doc[key] to doc.schema[key] 
      } 
     } 
     callback(doc); 
    } 
}); 
+0

我不認爲這是相關的問題。 OP不會嘗試打印密鑰,而是調用文檔上的實例方法。 – pyrho 2014-03-05 01:28:38