2011-05-27 73 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