Как правильно ссылаться на другую схему?MissingSchemaError: Schema не зарегистрировано для модели
Ошибка:
MissingSchemaError: Schema hasn't been registered for model "CategorySub".
Модель файла:
// module dependencies
var mongoose = require('mongoose')
, Schema = mongoose.Schema
, CategoryMain = mongoose.model('CategoryMain')
, CategorySub = mongoose.model('CategorySub');
// set up the schema
var CategoryProductSchema = new Schema({
name: { type: String },
_category_main : [CategoryMainSchema],
_category_sub : [CategorySubSchema]
},
{
collection: 'categories_product'
}
)
// before save function equivalent
CategoryProductSchema.pre('save', function(next){
var now = new Date();
this.updated_at = now;
if (!this.created_at) {
this.created_at = now;
}
next();
})
CategoryProductSchema.set('toObject', { getters: true });
mongoose.model('CategoryProduct', CategoryProductSchema);
EDIT
Это небольшой проект, который я взял на себя, и я новичок в MongoDB/Mongoose. Я нашел это в app.js от предыдущего владельца:
//load models
var models_path = __dirname + '/models/'
fs.readdirSync(models_path).forEach(function (file) {
if(~file.indexOf('.js')){
require(models_path + '/' + file);
}
})
Он просто проходит через папку и регистрирует каждую схему по одному. Однако в папке моя дочерняя схема находится перед моей родительской схемой, поэтому она сначала регистрируется.
Я добавил models.js
файлов, который выглядит так:
var models = ['token.js',
'user.js',
'category_main.js',
'category_sub.js',
'category_product.js',
'product.js'
];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i]);
}
};
А затем заменить исходный код в app.js для вызова требуется это новые модели файла следующим образом:
require('./models/models.js').initialize();
меня эта идея из одного из ответов в этом популярном вопросе:
Однако теперь я получаю ReferenceError: CategoryMainSchema is not defined
, исходя из моего файла модели category_sub.js
.
Это не MissingSchemaError
, однако.
Я думаю, что его необходимо определить схемы first- forCategoryMainSchema и CategorySubSchema, либо выше, либо ссылку на то, где они уже определены. –