无法修复猫鼬覆盖模型错误
Posted
技术标签:
【中文标题】无法修复猫鼬覆盖模型错误【英文标题】:Can't fix mongoose overwrite model error 【发布时间】:2015-02-12 09:40:26 【问题描述】:我正在使用 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)
我采用了与生成器附带的“事物”模型相同的结构。还进行了搜索以及 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);
我错过了什么?
【问题讨论】:
我遇到了同样的问题,虽然下面的建议似乎“解决”了我的问题,但很难相信这是解决问题的正确方法。 【参考方案1】:根据您发布的信息,据我了解,问题似乎是由以下几行引起的:
在对象。 (/Users/dev/wishlist/server/api/wishList/person.model.js:11:27)
module.exports = mongoose.model('Person', PersonSchema);
在对象。 (/Users/dev/wishlist/server/api/wishList/wishList.controller.js:4:14)
var Person = require('./person.model');
此错误最常见于 Mongoose 模型之间的不匹配。
在路上的某个地方,您以不同的名称定义了此模型,但使用相同的架构。
为了查看这是否是导致您的错误的原因,请在您需要 mongoose
之后将此代码添加到 person.model.js
:
'use strict';
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.models = ;
mongoose.modelSchemas = ;
这将清除您的猫鼬数据并清空所有现有模型和架构。
我在以下LINK找到了上述信息。
我还发现了一些解决此问题的其他讨论 HERE 和 HERE。
【讨论】:
感谢弗拉德修复它。我担心这个解决方案,因为这可能会清空我创建的其他模式。我阅读了您链接的文章,但没有一篇能真正解决我的问题。我明白出了什么问题,我只是不知道哪里出了问题。据我所知,我只定义了一次架构。【参考方案2】:几周前我也遇到了同样的错误。在尝试了几件事后,我得出了一个简单的解决方法:
尝试以这种方式导出人物模型 -
module.exports.PersonModel = mongoose.model('Person', PersonSchema);
而不是-module.exports = mongoose.model('Person', PersonSchema);
希望这会有所帮助!
如果您仍然收到错误,只是您导出此模型的模块中的路径。
【讨论】:
以上是关于无法修复猫鼬覆盖模型错误的主要内容,如果未能解决你的问题,请参考以下文章
变异时如何修复“猫鼬模型的名称”不是graphql中的构造函数