【问题标题】:Having problems exporting model functions (Express and Mongoose)导出模型函数时遇到问题(Express 和 Mongoose)
【发布时间】:2011-09-03 14:09:38
【问题描述】:

我一直在查看代码 (https://github.com/cmarin/MongoDB-Node-Express-Blog) 来学习 NodeJS、Express、Mongoose,但我无法从我的 ' models.js 文件,尤其是“保存”功能。

我收到以下错误:

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

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

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

【问题讨论】:

    标签: node.js express mongoose


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      看起来您已经使用原型构建了一个代理对象。在这种情况下,您将不得不像 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();
      

      【讨论】:

      • PollModel 不是猫鼬模式。这只是一个命名不佳的变量
      • 原来如此,github.com/kelper/Poll/blob/master/models.js#L31 - 很好。我会编辑。
      • 您好,我应该如何命名我的 models.js 中的变量?我想我不应该称它为 PollModel,因为 Poll 实际上是一个模型。我应该怎样称呼我的 PollModel?很抱歉造成混乱。
      • 它唯一令人困惑的原因是你说'使用猫鼬导出模型函数的问题'——我假设 PollModel 是一个猫鼬模式。您可以随意命名 imo,尽管就像我提到的那样,我希望您直接使用 Schema 进行查询
      • 您是否建议遵循以下结构:github.com/alessioalex/Nodetuts/blob/master/mongodb_mongoose/…?我不确定要遵循什么约定。我现在正处于 hacky 阶段,所以我不想在学习时陷入小细节。
      猜你喜欢
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 2012-05-18
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多