[英]Mongoose: Linked Model Schema “Hasn't Been Registered for Model”
当前将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
我已经审查了大约两个其他的Stackoverflow问题,涉及相同的错误,所有这些问题都指向在require('express')
之前对模型使用require
。
但是,我目前正在遵循该做法,但仍得到无法识别的架构(这使我相信将模型链接在一起的方式是不正确的)。
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);
在这一点上,我相当确定这是我在要求并将不同模型链接在一起时犯的与猫鼬无关的错误。
发生此错误的原因是,您需要在app.js
Semester
之前需要Member
模型,这是因为当需要'./models/member'
时, Semester
模型和架构不存在
尝试将app.js
的顺序更改为:
// MODELS
require('./models/semester');
require('./models/member');
为了避免这种情况,您可以从脚本文件('./models/semester')中请求模型,而不是通过声明了Member
模型( ./models/member
)的脚本文件中的模型从mongoose
获取model
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.