Как использовать модель мангуста, определенную в отдельном файле, если файл не экспортируется?
Рассмотрим очень простую структуру приложения Express 4:
-- app.js
-- models
|--db.js
|--news.js
Где news.js содержит схему мангуста и модель, основанную на этой схеме:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var newsSchema = new Schema({
title: String,
subtitle: String,
// other fields...
});
var News = mongoose.model('News', newsSchema);
Насколько я понимаю, для того, чтобы app.js использовать модель News, он должен требовать файл в скрипте, как это: require('./models/news'). Кроме того, news.js придется экспортировать модель следующим образом: module.exports = News;.
Однако я столкнулся с рядом сценариев, которые не экспортируют модели (или что-нибудь в этом роде), определенные в отдельном файле в то время как все еще можно использовать эти модели и / или схемы в другом файле, просто потребовав файл модели, а затем сделать что-то вроде этого:
var mongoose = require('mongoose');
var News = mongoose.model('News');
Как такое поведение возможно? Это особая особенность Мангуста? Как файл может использовать модель или схему, определенную в другом файле, если эта модель / схема не экспортируется в этот файл?
1 ответ:
Это в конечном счете работает, потому что при вызове
require('mongoose')в различных файлах вы получаете один и тот же объект. Другими словами: в вашем случае он разделяется междуapp.jsиnews.js.Когда вы создаете новую модель (используя
mongoose.Model('Name', schema)), Мангуст сохраняет этот экземпляр модели во внутреннем списке моделей.Это также позволяет получить экземпляр по имени, используя
mongoose.Model('Name'). Мангуст найдет эту модель в своем внутреннем списке и вернет ее.
Comments