我遇到了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。
答案 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();