编译后无法覆盖`Kitten`模型

时间:2014-06-12 15:28:10

标签: node.js mongodb mongoose

我遇到了Mongoose Getting Started指南的问题。

我运行MongoDB,一切正常,直到我添加最后一行:

Kitten.find({ name: /^Fluff/ }, callback)

当我node server.js时,我收到此错误:

  

OverwriteModelError:编译后无法覆盖Kitten模型。

这里是full error和我的server.js

知道我做错了什么吗?

P.S。我正在运行节点10.26,npm 1.4.13,表达4.4.3& OS X 10.9.3上的mongoose 3.8.12。

2 个答案:

答案 0 :(得分:2)

您收到错误,因为callback中的Kitten.find({ name: /^Fluff/ }, callback)再次致电var Kitten = mongoose.model('Kitten', kittySchema);。变化

Kitten.find({ name: /^Fluff/ }, callback)

类似于:

Kitten.find({ name: /^Fluff/ }, function(err, kittens) {

});

再次调用callback函数没有意义。

答案 1 :(得分:1)

我认为这对尝试它的其他人有用......

我开始研究猫鼬并尝试了Getting Started指南。我没有看到上述错误发生在报告的地方。但是,我确实间歇地看到了它。如果发生,请按照下面的#3。以下是我的观察:

问题#1。 如果我复制粘贴整个代码,我会发现&#34的问题;我没有名字"因为don的单引号没有被转义。

解决方案#1。 我试图用\和\来逃避,但它没有用。谷歌搜索没有帮助。经过一些研究后,我发现它对函数外的单引号是宽容的。但是,在功能内部它不会起作用。所以,我在函数外部定义了一个变量。可能更好的是在单独的文档中定义字符串以进行本地化。最重要的是,它有效。 :)

问题#2。 我看到了问题所在 fluffy.speak(); TypeError:fluffy.speak不是函数 这是因为第一个“mongoose.model(...)'没有这种方法,稍后再添加并重新运行mongoose.model(...)'没有用。

解决方案#2。 评论第一个' mongoose.model(...)'

问题#3。 当我从网站上复制粘贴代码时,会导致奇怪的错误。

解决方案#3。 刚刚删除了Notepad ++中行末尾的所有标签和空格。这照顾了它。

以下是适用于我的代码(不用说,如果它不起作用,请先在记事本中复制粘贴):

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/test');

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection.error:'));
db.once('open', function(callback) {
//yay!
});

var kittySchema = mongoose.Schema({
name: String
});
//var Kitten = mongoose.model('Kitten', kittySchema);

//var silence = new Kitten({ name: 'Silence' });
//console.log(silence.name);
//console.log(silence);

var noname = "I don't have a name";

kittySchema.methods.speak = function () {
var greeting = this.name
? "Meow name is " + this.name
: noname;
console.log(greeting);
}
var Kitten = mongoose.model('Kitten', kittySchema);

var fluffy = new Kitten({ name : 'fluffy' });
fluffy.speak();