【问题标题】:Cannot overwrite `Kitten` model once compiled编译后无法覆盖`Kitten`模型
【发布时间】:2014-08-03 00:10:21
【问题描述】:

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

我正在运行 MongoDB,并且在我添加最后一行之前,一切都运行良好:

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

当我node server.js 我得到这个错误:

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

这是full error 和我的server.js。

知道我做错了什么吗?

附:我在 OS X 10.9.3 上运行节点 10.26、npm 1.4.13、express 4.4.3 和 mongoose 3.8.12。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

    类似于:

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

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

    【讨论】:

    • 这行得通 - 谢谢!请注意,我需要将结尾 }}; 更改为 });
    【解决方案2】:

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

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

    问题#1。如果我复制粘贴整个代码,我会看到“我没有名字”作为单引号的问题 don't没有转义。

    解决方案#1。我尝试使用 \ 和 \\ 进行转义,但没有成功。谷歌搜索没有帮助。经过一些研究,我发现它可以容忍函数之外的单引号。但是,在函数内部它不起作用。所以,我在函数之外定义了一个变量。无论如何,最好在单独的文档中定义字符串以进行本地化。最重要的是,它有效。 :)

    问题#2。 我在 蓬松的.speak(); TypeError: fluffy.speak 不是函数 这里由于第一个 'mongoose.model(...)' 没有这个方法,以后添加它并重新运行 'mongoose.model(...)' 将无济于事。

    Solution#2。评论第一个'mongoose.model(...)'

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

    Solution#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();
    

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2013-10-03
      • 2015-04-25
      • 2017-06-22
      • 2017-10-04
      • 2022-08-21
      • 2020-03-06
      • 2021-03-24
      相关资源
      最近更新 更多