Sobald ein Schema erstellt und im Modellordner abgelegt wurde. Eine Codezeile wird als solche hinzugefügt ...
// within "/models/Foos.js"
mongoose.model( "Foo", FooSchema )
... aber ein Verweis auf dieses Schema wird auch in der Datei "app.js" des Knotens als solche hinzugefügt ...
var mongoose = require( "mongoose" );
require( "./models/Foos" )
... aber was ist der Unterschied? Warum müssen wir letzteres tun (dh einen Schemadateiverweis auf ein globales Mungo-Objekt in app.js hinzufügen), wenn wir bereits etwas scheinbar Ähnliches in der Schemadatei selbst gemacht haben (dh FoosSchema) .js), von mongoose.model( "Foo", FooSchema )
. Was ist los?
Antworten:
0 für die Antwort № 1Das mongoose.model("Foo", FooSchema)
line registriert das Modell global im Inneren mongoose
, was bedeutet, dass es möglich ist, das Modell über zu bekommen mongoose.model("Foo")
überall in der Anwendung. Allerdings das Modell Foo
wird erst nach dem eingetragen foos.js
ist require
msgstr "" "innerhalb der Anwendung. Daher müssen Sie die Datei noch irgendwo benötigen, daher die Zeile require( "./models/Foos" )
BEARBEITEN: Verwenden Sie eine Schleife, um jede Datei in einem Modellverzeichnis anzufordern.
var normalizedPath = require("path").join(__dirname, "./models");
require("fs").readdirSync(normalizedPath).forEach(function(file) {
require("./models/" + file);
});
1 für die Antwort № 2
Naja eigentlich kann es nur sein:
var Foo = mongoose.model( "Foo" );
Nachdem die erste Modelldeklaration vorgenommen wurde, wird nur das angegebene Modell mit dem bereits angehängten Schema abgerufen, und natürlich haben Sie bereits ein require
zum mongoose
zumindest im Rahmen.
Ebenso könnte man es einfach komplett inline nutzen:
mongoose.model( "Foo" ).find({},function(err,foos) {
// do something
});
Am Ende nähern sich die "zwei" mit beiden require
für Ihr definiertes Modul und das mongoose.model
Accessor erreichen in der Regel das gleiche. Der Hauptunterschied ist das require
ist "pfadzentriert" zur Struktur Ihrer Anwendung. Wohingegen mongoose.model
prüft die eigene "Registry" von Mungo auf definierte Modelldaten und ruft den gewünschten "Service" namentlich ab.
Deshalb mit mongoose.model
kann in vielen Fällen als "sauberer" angesehen werden, aber auf der anderen Seite require
Dies entspricht möglicherweise eher der Logik anderer Modulimporte als der anderer Benutzer.
Es kommt wirklich darauf an, Muster und Stil zu kodieren, die am besten zu Ihnen passen. Obwohl als "name based", die mongoose.model
style eignet sich eher für "dynamischen" Code zum Abrufen des erforderlichen Modells als für das Importieren aus einem "Pfad" in Ihrer Anwendung.
Bedenken Sie:
async.each(["Foo","Bar"],function(modelName,callback) {
mongoose.model(modelName).remove({},callback);
},function(err) {
//done
});
Als Beispiel für einen Programmaufruf, der nicht benötigt wird require
für ein registriertes Modell.