Mongoose:链接的模型模式“尚未注册模型”

时间:2015-06-21 05:59:34

标签: javascript node.js mongodb express mongoose

目前将Mongoose与MongoDB一起用于Express服务器,但是我试图将几个Mongoose模型链接在一起并且我正在

MissingSchemaError: Schema hasn't been registered for model "Semester".
Use mongoose.model(name, schema)

我的执行。

目前的项目结构如下

app.js
www.js
models
|-- member.js
|-- semester.js
routes
|-- members.js

我已经回顾了大约24个关于同一错误的其他Stackoverflow问题,所有这些问题都指向在require之前使用require('express')模型。

但是,我目前正在遵循这种做法,但仍然得到一个无法识别的架构(这让我相信我将这些模型链接在一起的方式不正确)。

app.js

// DEPENDENCIES
var bodyParser = require('body-parser');
var mongoose = require('mongoose'); // NOTE: Mongoose needs to be required before express

// MODELS   
require('./models/member');
require('./models/semester');

// ROUTES
var members = require('./routes/members'); // NOTE: Routes need to be required before express as well

var express = require('express');
var app = express();

// ... More Stuff ...

module.exports = app;

我的./routes/members.js

var Member = require('../app/models/member');
require('../app/models/semester');
var express = require('express');

var router = express.Router();

// ... Logic is here ...

module.exports = router;

最后是模特本身 member.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Semester = require('mongoose').model('Semester').schema;
// Would var Semester = mongoose.model('Semester').schema also work?

var MemberSchema = new Schema({
  name: {
    first: {type: String, default: ''},
    last: {type: String, default: ''}
  },
  studentID: {type: Number, default: 0},
  email: {type: String, default: ''},
  social: {type: Social},
  semesters: [Semester],
  currenPosition: {type: String, default: ''}
});
module.exports = mongoose.model('Member', MemberSchema);

semester.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Event = require('mongoose').model('Event').schema; // These are valid models, but I haven't included them in the scope of this question
var Project = require('mongoose').model('Project').schema;

// Object which describes a singular semester
var SemesterSchema  = new Schema({
  term: {type: String, default: ''},
  year: {type: Number, default: ''},
  position: {type: String, default: ''}
  events: [Event],
  projects: [Project]
});

module.exports = mongoose.model('Semester', SemesterSchema);

我相信在这一点上,当我要求并将不同模型连接在一起时,这是一个非猫鼬相关的错误。

1 个答案:

答案 0 :(得分:0)

可能会发生此错误,因为您在Member Semester之前需要app.js模型,这是因为Semester模型和架构在'./models/member'时不存在是必需的

尝试将app.js中的顺序更改为:

// MODELS   
require('./models/semester');
require('./models/member');

要避免这种情况,您可以要求脚本文件中的模型('./models/semester')而不是从脚本文件中mongoosemodel获取该模型{{1} }模型被声明(Member