导出模型函数时遇到问题(Express和Mongoose)

时间:2011-05-27 17:35:51

标签: node.js express mongoose

我一直在寻找代码(https://github.com/cmarin/MongoDB-Node-Express-Blog)来学习NodeJS,Express,Mongoose,而且我无法从我的'导入'民意调查'功能models.js'文件,特别是'save'函数。

我收到以下错误:

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

另一个快速问题。如何排除文件被提交?我一直把交换文件等提交给我的仓库。

如果您发现我的代码有任何其他问题,请告诉我。我知道有人提到我的命名惯例令人困惑。我应该如何命名我的变量?

2 个答案:

答案 0 :(得分:5)

PollModel是一个函数构造函数,您想要创建一个对象。

var PollModel = require('./models').PollModel;错了

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

答案 1 :(得分:4)

看起来你已经使用原型构建了一个代理对象。在这种情况下,你将不得不“新建”一个实例来使用它作为Raynos提到的。

我认为你所期待的是对象文字提供的东西,而不是原型类。类似的东西:

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

我个人直接使用mongoose架构。

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();