Ich habe eine anständige Größe Projekt und ich muss ein wenig Umstrukturierung tun.Speichern Sie Modelle in Ordner, verwenden Sie index.js, um sie alle zu benötigen
Ich benutze Mungo als mein ORM für Knoten. Ich würde gerne alle meine Mungo-Models in einen Ordner namens "Models" stecken. Ich habe gelesen, dass wenn ich das tue, ich eine index.js-Datei in den Modellordner legen kann, so dass alle Modelle eingezogen und gespeichert werden.
app.js:
...
var mongoose = require('mongoose');
var models = require('./models')(mongoose);
app.configure(function() {
mongoose.connect(dbPath, function(err) {
if (err) throw err;
});
...
});
// include models in my routes so I need access
...
ich auf genau steckte immer, was ich brauche in dem index.js zu tun all
index.js meine Modelle zurück (das ist, was ich versucht habe, , nicht einmal in der Nähe)
function Models(mongoose) {
var Counters = require('./counters')(mongoose);
var User = require('./user')(mongoose);
var Token = require('./token')(mongoose);
var Team = require('./team')(mongoose);
var Role = require('./role')();
var Layer = require('./layer')(mongoose, counters);
var Feature = require('./feature')(mongoose, counters, async);
}
module.exports = Models;
auch soll ich in Mungo von dem app.js passieren, da ich dort mongo benötigt verbinden? I.E. Ich kann es wieder in der index.js anfordern, aber ich bin mir nicht sicher, ob die Verwendung desselben Moduls in verschiedenen Dateien eine schlechte Übung ist.
EDIT: (hier auf meinen Modelle)
Leider vergaß zu erwähnen, dass ich ‚Accessor‘ Typ Funktionen in meinen Modellklassen hinzufügen. I.E. Ich möchte für jedes Modell eine öffentliche Schnittstelle präsentieren.
user.js:
module.exports = function(mongoose) {
// Creates a new Mongoose Schema object
var Schema = mongoose.Schema;
// Collection to hold users
var UserSchema = new Schema({
username: { type: String, required: true },
password: { type: String, required: true },
},{
versionKey: false
}
);
// Creates the Model for the User Schema
var User = mongoose.model('User', UserSchema);
var getUserById = function(id, callback) {
User.findById(id, callback);
}
var getUserByUsername = function(username, callback) {
var query = {username: username};
User.findOne(query, callback);
}
return {
getUserById: getUserById,
getUserByUsername: getUserByUsername
}
}
Vielen Dank für die Erklärung, das macht Sinn. Noch eine Sache, die ich meinen Modellcode hinzufügte. Ich mag es, dass es eine "öffentliche" Schnittstelle zu meinem Benutzermodell bietet. Um das zu verwenden, müsste ich das Modell irgendwo speichern, damit ich später darauf zugreifen kann, oder? Stellen Sie sich vor meine Modelle/index.js können etwas in den export.modules zurückgeben, so dass ich Zugriff auf alle meine benutzerdefinierten Modelle haben könnte, richtig? – lostintranslation
@forumuser Ich denke, dass Sie stattdessen statische Konstruktormethoden verwenden sollten. siehe http://mongoosejs.com/docs/guide.html (Statik) – luin
Ich wollte verhindern, dass Benutzer statische Funktionen von Mongoose verwenden, so dass die Verwendung von Mungo vom Benutzer abstrahiert wurde.IE verwenden keine statischen Mungo-Konstruktoren, sondern nur öffentliche API, die ich zurückgegeben habe. Das macht es einfacher, wenn ich von Mongodb zu Postgres gehe, da alle meine Routen immer noch die gleichen öffentlichen Methoden aufrufen können, die ich definiert habe. Ich muss nur die Eingeweide der Methoden ändern. – lostintranslation