【问题标题】:Cannot overwrite model once compiled编译后无法覆盖模型
【发布时间】:2019-01-13 09:42:41
【问题描述】:

我想使用 mongoose 在 mongodb 中插入记录,但出现错误“编译后无法覆盖“故事”模型”

app.post('/getdata', (req, res, next) => {
  var mongoose = require('mongoose');
  mongoose.connect('mongodb://localhost:27017/mydb');
  var Schema = mongoose.Schema;
  var mongoose = require('mongoose');
  var Schema = mongoose.Schema;

  var personSchema = Schema({
    _id: Schema.Types.ObjectId,
    name: String,
    age: Number,
    stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }]
  });


  var storySchema = Schema({
    author: { type: Schema.Types.ObjectId, ref: 'Person' },
    title: String,
    fans: [{ type: Schema.Types.ObjectId, ref: 'Person' }]
  });

  var Story = mongoose.model('Story', storySchema);
  var Person = mongoose.model('Person', personSchema);
  res.send("Om Success");
})

【问题讨论】:

    标签: node.js mongodb express mongoose mongoose-populate


    【解决方案1】:

    每次有人点击/getdata 后端点时,您都​​在初始化猫鼬和所有架构,并且由于您有明确的应用程序主进程,直到您手动或发生任何未处理的错误时才会终止。

    所以目前在你的程序中,是这样的场景:

    第一次请求 /getdata

    • 您的 mongoose 将被初始化,StoryPerson 模型已注册到 mongoose 对象,这是全局的,因此您可以在任何地方使用它,这也是独一无二的(您的错误在这里)。

    从第二个请求到 /getdata

    • 您已经在 mongodb://localhost:27017/mydb DB 中注册了 StoryPerson 模型,因此它需要唯一的模型,它会引发错误。

    解决方案

    或者如果您想在同一个文件中执行此操作(出于明显的原因不推荐),请执行以下操作

    var express = require('express');
    var mongoose = require('mongoose');
    
    var app = express();
    var Schema = mongoose.Schema;
    
    mongoose.connect('mongodb://localhost:27017/mydb');
    
    var personSchema = Schema({
        _id: Schema.Types.ObjectId,
        name: String,
        age: Number,
        stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }]
    });
    
    
    var storySchema = Schema({
        author: { type: Schema.Types.ObjectId, ref: 'Person' },
        title: String,
        fans: [{ type: Schema.Types.ObjectId, ref: 'Person' }]
    });
    
    var Story = mongoose.model('Story', storySchema);
    var Person = mongoose.model('Person', personSchema);
    
    
    app.post('/getdata', (req, res, next) => 
    {
        res.send("Om Success");
    })
    

    【讨论】:

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