编译后无法覆盖模型

时间:2018-08-06 12:18:54

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

我想使用猫鼬在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");
})

1 个答案:

答案 0 :(得分:0)

您正在初始化猫鼬,并且每当有人点击/getdata后端点时,所有架构都将被初始化,并且正如您所表示的那样,直到您手动或任何未处理的错误发生时,应用程序的主要过程才会终止。

因此,当前在您的程序中是这种情况:

首次请求/ getdata

  • 您的猫鼬将被初始化,并且StoryPerson模型已向猫鼬对象注册,并且这是全局的,因此您可以在任何地方使用它,并且这也是唯一的(您的错误在这里)。 / li>

从第二个请求到/ getdata

  • 您已经向Story DB注册了Personmongodb://localhost:27017/mydb模型,因为它需要唯一的模型,将引发错误。

解决方案

或者如果您想在同一文件中执行此操作(出于明显原因不建议这样做)

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");
})