Man definerer Schema
så applikationen forstår, hvordan man kortlægger data fra MongoDB til JavaScript-objekter. Schema
er en del af ansøgningen. Den har intet med database at gøre. Det kortlægger kun database til JavaScript-objekter. Så ja - hvis du vil have en god kortlægning, skal du køre denne kode i hver applikation, der har brug for det. Det gælder også for getters/settere/validations/etc.
Bemærk dog, at gør dette:
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);
vil registrere Schema
globalt. Det betyder, at hvis den applikation, du kører, bruger et eksternt modul, så kan du i dette modul blot bruge
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(bemærk, at du faktisk skal registrere Schema
før du bruger denne kode, ellers vil en undtagelse blive kastet).
Men alt dette virker kun inden for én nodesession, så hvis du kører en anden node-app, som har brug for adgang til Schema
, så skal du ringe til registreringskoden. Så det er en god idé at definere alle skemaer i separate filer, for eksempel comments.js
kan se sådan ud
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);
};
opret derefter filen models.js
som kan se sådan ud
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Kalder nu require('models.js').initialize();
vil initialisere alle dine skemaer for en given nodesession.