目前将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);
我相信在这一点上,当我要求并将不同模型连接在一起时,这是一个非猫鼬相关的错误。
答案 0 :(得分:0)
可能会发生此错误,因为您在Member
Semester
之前需要app.js
模型,这是因为Semester
模型和架构在'./models/member'
时不存在是必需的
尝试将app.js
中的顺序更改为:
// MODELS
require('./models/semester');
require('./models/member');
要避免这种情况,您可以要求脚本文件中的模型('./models/semester')而不是从脚本文件中mongoose
到model
获取该模型{{1} }模型被声明(Member
)