我一直在寻找代码(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
另一个快速问题。如何排除文件被提交?我一直把交换文件等提交给我的仓库。
如果您发现我的代码有任何其他问题,请告诉我。我知道有人提到我的命名惯例令人困惑。我应该如何命名我的变量?
答案 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();