Persönlich habe ich ein separates "allgemeines" Projekt mit einer Init-Methode erstellt, um alle Modelle bei mongodb zu registrieren und die Init-Methode in der Datei app.js aller Apps aufzurufen, die Zugriff auf die Modelle benötigen.
- Gemeinsames Projekt erstellen - Erstellen Sie ein neues Node-Projekt gemäß dem Standardprozess.
-
Paket.json - Legen Sie im freigegebenen Projekt Ihre
package.json
fest Datei mit folgendem Eintrag:"main": "index.js"
-
Modell hinzufügen - Erstellen Sie ein neues
models
Ordner innerhalb Ihres freigegebenen Projekts, um alle Ihre Mongoose-Schemas und Plugins zu enthalten. Fügen Sie Ihre userSchema-Datei zum Ordner „models“ hinzu und nennen Sie sieuser.js
.var mongoose = require('mongoose'); var userSchema = new mongoose.Schema({ email: String }); module.exports = mongoose.model('User', userSchema);
-
index.js - Dann im Stammverzeichnis des Projekts
index.js
Datei ein gemeinsam genutztes Objekt erstellen, das von Ihren Apps verwendet werden kann, indem die Modelle und eininit
verfügbar gemacht werden Methode. Es gibt viele Möglichkeiten, dies zu codieren, aber hier ist, wie ich es mache:function Common() { //empty array to hold mongoose Schemas this.models = {}; } Common.prototype.init = function(mongoose) { mongoose.connect('your mongodb connection string goes here'); require('./models/user'); //add more model references here //This is just to make referencing the models easier within your apps, so you don't have to use strings. The model name you use here must match the name you used in the schema file this.models = { user: mongoose.model('User') } } var common = new Common(); module.exports = common;
- Verweisen Sie auf Ihren
common
Projekt - Wie auch immer Sie auf Ihr freigegebenes Projekt verweisen möchten, fügen Sie den Verweis auf das freigegebene Projekt inpackage.json
hinzu Datei in Ihrer App und geben Sie ihr den Namencommon
. Persönlich habe ich GitHub zum Speichern des Projekts verwendet und auf den Repository-Pfad verwiesen. Da mein Repository privat war, musste ich einen Schlüssel im Pfad verwenden, der auf der GitHub-Support-Site behandelt wird. -
Initiieren Sie die Modelle in Ihrer App - Im Startskript für Ihre App (nehmen wir an, es ist
app.js
für dieses Beispiel) fügen Sie den Verweis zu Ihremcommon
hinzu project und rufen Sieinit
auf -Methode, um eine Verbindung zum Mongodb-Server herzustellen und die Modelle zu registrieren.//at the top, near your other module dependencies var mongoose = require('mongoose') , common = require('common'); common.init(mongoose);
-
Verwenden Sie das Modell überall in Ihrer App - Nachdem Mongoose den Verbindungspool eingerichtet hat und die Modelle registriert wurden, können Sie die Modelle in jeder der Klassen in Ihrer App verwenden. Angenommen, Sie haben eine Seite, die Informationen über einen
user
anzeigt Sie könnten es so machen (ungetesteter Code, habe dies nur als Beispiel geschrieben):var common = require('common'); app.get('/user-profile/:id', function(req, res) { common.models.user.findById(req.params.id, function(err, user) { if (err) console.log(err.message); //do something else to handle the error else res.render('user-profile', {model: {user: user}}); }); });
BEARBEITEN Entschuldigung, ich habe die Zeile nicht gesehen, in der Sie ein Schema von einem anderen geerbt haben. Wie in einer der anderen Antworten angegeben, bietet Mongoose bereits das Konzept eines plugin
an . In Ihrem obigen Beispiel würden Sie Folgendes tun:
In Ihrem gemeinsamen Modul unter '/models/base-profile-plugin.js'
module.exports = exports = function baseProfilePlugin(schema, options){
//These paths will be added to any schema that uses this plugin
schema.add({
_user: {type: Schema.Types.ObjectId, ref: 'User', required: true},
name: {type: String, required: true},
bio: {type: String, required: true},
pictureLink: String
});
//you can also add static or instance methods or shared getter/setter handling logic here. See the plugin documentation on the mongoose website.
}
In Ihrem gemeinsamen Modul unter '/models/entrepreneur.js
var mongoose = require('mongoose')
, basePlugin = require('./base-profile-plugin.js');
var entrepreneurSchema = new mongoose.Schema({
mentors: {type: Schema.Types.ObjectId, ref: 'Mentor'}
});
entrepreneurSchema.plugin(basePlugin);
module.exports = mongoose.model('Entrepreneur', entrepreneurSchema);