无法修复mongoose覆盖模型错误

时间:2014-12-13 23:11:05

标签: javascript angularjs node.js mongodb

我正在使用angular-fullstack生成器,我添加了一个模型人。当我尝试在seed.js文件中要求person模型时,我收到此错误。

    /Users/dev/wishlist/node_modules/mongoose/lib/index.js:334
      throw new mongoose.Error.OverwriteModelError(name);
            ^
OverwriteModelError: Cannot overwrite `Person` model once compiled.
    at Mongoose.model (/Users/dev/wishlist/node_modules/mongoose/lib/index.js:334:13)
    at Object.<anonymous> (/Users/dev/wishlist/server/api/wishList/person.model.js:11:27)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/dev/wishlist/server/api/wishList/wishList.controller.js:4:14)
    at Module._compile (module.js:456:26)

我遵循了与#34; Thing&#34;相同的结构。发电机附带的型号。还进行了搜索,其中Person位于代码库中,并且仅位于person.model.js和控制器中。

person.model.js:

'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var PersonSchema = new Schema({
  name: String,
  quote: String
});

module.exports = mongoose.model('Person', PersonSchema);

wishlist.controller.js:

'use strict';

var _ = require('lodash');
var Person = require('./person.model');

// Get all the People that have wish lists
exports.getPeople = function(req, res) {
  Person.find(function (err, people) {
    if(err) { return handleError(res, err); }
    return res.json(200, people);
  });
};

function handleError(res, err) {
  return res.send(500, err);
}

我错过了什么?

2 个答案:

答案 0 :(得分:4)

据我所知,您发布的信息似乎是由以下几行引起的:

在Object上

。 (/Users/dev/wishlist/server/api/wishList/person.model.js:11:27)

module.exports = mongoose.model('Person', PersonSchema);
在Object上

。 (/Users/dev/wishlist/server/api/wishList/wishList.controller.js:4:14)

var Person = require('./person.model');

此错误最常见于Mongoose模型之间的不匹配。

在某个地方,您已使用不同的名称定义此模型,但使用相同的架构。

为了查看是否是导致错误的原因,请在person.model.js之后立即在mongoose中添加此代码:

'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

mongoose.models = {};
mongoose.modelSchemas = {};

这将清除你的mongoose数据并清空所有现有的模型和模式。

我在以下LINK找到了上述信息。

我还发现了一些解决此问题的其他讨论HEREHERE

答案 1 :(得分:0)

几周前,我也遇到了同样的错误。在尝试了几件事之后,我提出了一个简单的解决方法:

只需尝试以这种方式导出人物模型-

module.exports.PersonModel = mongoose.model('Person',PersonSchema);

代替-module.exports = mongoose.model('Person',PersonSchema);

希望这会有所帮助!

如果仍然出现错误,则只是导出此模型的模块中的路径。