En definierar Schema
så att applikationen förstår hur man mappar data från MongoDB till JavaScript-objekt. Schema
är en del av applikationen. Den har inget har med databasen att göra. Den mappar bara databasen till JavaScript-objekt. Så ja - om du vill ha snygg mappning måste du köra den här koden i varje applikation som behöver det. Det gäller även för getters/setters/validations/etc.
Observera dock att du gör detta:
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);
kommer att registrera Schema
globalt. Detta betyder att om applikationen du kör använder någon exteriör modul, så kan du i denna modul helt enkelt använda
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(observera att du faktiskt behöver registrera Schema
innan du använder den här koden, annars kommer ett undantag att skapas).
Men allt detta fungerar bara inom en nodsession, så om du kör en annan nodapp som behöver åtkomst till Schema
, då måste du ringa registreringskoden. Så det är en bra idé att definiera alla scheman i separata filer, till exempel comments.js
kan se ut så här
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);
};
skapa sedan filen models.js
som kan se ut så här
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Anropar nu require('models.js').initialize();
kommer att initiera alla dina scheman för en given nodsession.