3

我一直在查看代码 (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

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

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

4

2 回答 2

5

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

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

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

于 2011-05-27T19:11:25.477 回答
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();
于 2011-05-27T19:16:35.560 回答