/ / mongoose.model ('Foo', FooSchema) vs require ('./models/Foos') - node.js, mongodb, mongoose

mongoose.model ('Foo', FooSchema) vs erfordern ('./models/Foos') - node.js, mongodb, mongoose

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 № 1

Das 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 requiremsgstr "" "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.