2011-05-27 74 views
3

我一直在尋找代碼(https://github.com/cmarin/MongoDB-Node-Express-Blog)來學習NodeJS,Express,Mongoose和我正在麻煩從我的'models.js'文件導入'Poll'功能,特別是'保存'功能。在導出模型函數(Express和Mongoose)時遇到問題

我收到以下錯誤:

500 TypeError: Object function(){} has no method 'save' 

它發生在我的app.js.的54線我無法保存一個新的投票,因爲它無法找到函數: https://github.com/kelper/Poll/blob/master/app.js

這裏是我的模型文件,並保存功能是在線62: https://github.com/kelper/Poll/blob/master/models.js

另外一個快速的問題。我如何排除文件被提交?我一直提交交換文件等回購。

如果您發現我的代碼有任何問題,請告訴我。我知道有人提到我的命名規則很混亂。我應該如何命名我的變量?

回答

5

PollModel是一個函數構造函數,您要創建一個對象。

var PollModel = require('./models').PollModel;是錯誤的

var pollModel = new (require('./models').PollModel);是正確的。

4

看起來你有一個使用原型構建的代理對象。在這種情況下,當Raynos提到的時候,你將不得不「新建」一個實例來使用它。

我想你所期待的是對象字面量提供的,而不是原型類。例如:

module.exports.PollModel = { 
    findPolls : function (callback) { ... }, 
    findById : function (id, callback) { ... }, 
    updateById : function (id, body, callback) { ... } 
} 

我會直接親自使用貓鼬模式。

Mongoose使用Schema對象爲該特定模型執行查詢,但如果實際上想要創建並保存該模式類型的新對象,則需要新建一個新對象。

// Assume you've exposed the mongoose Poll schema directly 
var Poll = require('./models').Poll; 

// Create a new instance 
var instance = new Poll(); 

// Valid 
instance.save(); 

// Not valid 
instance.find(function(err, docs){}); 

// Valid 
Poll.find(function(err, docs){}); 

// Not valid 
Poll.save(); 
+0

PollModel不是貓鼬模式。這只是一個不好名稱的變量 – Raynos 2011-05-27 19:25:39

+0

所以它是,https://github.com/kelper/Poll/blob/master/models.js#L31 - 很好的捕獲。我會編輯。 – Josh 2011-05-27 19:29:36

+0

你好,我應該如何命名我的models.js中的變量?我想我不應該把它稱爲PollModel,因爲Poll實際上是一個模型。我應該怎樣稱呼我的PollModel?對困惑感到抱歉。 – Kelp 2011-05-27 20:34:14