Как использовать модель мангуста, определенную в отдельном файле, если файл не экспортируется?



Рассмотрим очень простую структуру приложения 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');


Как такое поведение возможно? Это особая особенность Мангуста? Как файл может использовать модель или схему, определенную в другом файле, если эта модель / схема не экспортируется в этот файл?

637   1  

1 ответ:

Это в конечном счете работает, потому что при вызове require('mongoose') в различных файлах вы получаете один и тот же объект. Другими словами: в вашем случае он разделяется между app.js и news.js.

Когда вы создаете новую модель (используя mongoose.Model('Name', schema)), Мангуст сохраняет этот экземпляр модели во внутреннем списке моделей.

Это также позволяет получить экземпляр по имени, используя mongoose.Model('Name'). Мангуст найдет эту модель в своем внутреннем списке и вернет ее.

Comments

    Ничего не найдено.