Ответ 1
Определяет Schema
, поэтому приложение понимает, как отображать данные из MongoDB в объекты JavaScript. Schema
является частью приложения. Он имеет ничего для работы с базой данных. Он только отображает базу данных в объекты JavaScript. Поэтому да - если вы хотите иметь хорошее сопоставление, вам нужно запустить этот код в каждом приложении, которое ему нужно. Это также относится к геттерам/сеттерам/валидации/и т.д.
Обратите внимание, что это:
var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
var Comments = new Schema({
title : String
, body : String
, date : Date
});
mongoose.model("Comments", Comments);
зарегистрирует Schema
globaly. Это означает, что если приложение, в котором вы работаете, использует какой-то внешний модуль, то в этом модуле вы можете просто использовать
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(обратите внимание, что вам действительно нужно зарегистрировать Schema
перед использованием этого кода, иначе будет выведено исключение).
Однако все это работает только внутри одного сеанса node, поэтому, если вы используете другое приложение node, которому нужен доступ к Schema
, вам необходимо вызвать регистрационный код. Поэтому неплохо определить все схемы в отдельных файлах, например comments.js
может выглядеть так:
var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
module.exports = function() {
var Comments = new Schema({
title : String
, body : String
, date : Date
});
mongoose.model("Comments", Comments);
};
затем создайте файл models.js
, который может выглядеть так:
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Теперь вызов require('models.js').initialize();
инициализирует все ваши схемы для заданного сеанса node.