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

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

Une fois le schéma créé et placé dans le dossier des modèles. Une ligne de code est ajoutée en tant que telle ...

// within "/models/Foos.js"
mongoose.model( "Foo", FooSchema )

... mais une référence à ce schéma est également ajoutée dans le fichier app.js du nœud, en tant que tel ...

var mongoose = require( "mongoose" );
require( "./models/Foos" )

... mais quelle est la différence? Pourquoi avons-nous besoin de faire ce dernier (c'est-à-dire ajouter une référence de fichier de schéma à un objet mangouste global dans app.js), alors que nous avons déjà fait quelque chose qui semble similaire, dans le fichier de schéma lui-même (c'est-à-dire FoosSchema .js), par mongoose.model( "Foo", FooSchema ). Que se passe-t-il?

Réponses:

0 pour la réponse № 1

le mongoose.model("Foo", FooSchema) ligne enregistre le modèle globalement à l'intérieur mongoose, ce qui signifie qu'il est possible d'obtenir le modèle via mongoose.model("Foo") n'importe où dans l'application. Cependant, le modèle Foo n'est enregistré qu'après foos.js est require"d à l'intérieur de l'application. Par conséquent, vous devez toujours demander le fichier quelque part, d'où la ligne require( "./models/Foos" )

EDIT: utilisez une boucle pour exiger chaque fichier dans un répertoire de modèle.

var normalizedPath = require("path").join(__dirname, "./models");
require("fs").readdirSync(normalizedPath).forEach(function(file) {
require("./models/" + file);
});

1 pour la réponse № 2

Eh bien, en fait, cela peut être juste:

var Foo = mongoose.model( "Foo" );

Une fois la déclaration de modèle initiale effectuée, qui récupérera simplement le modèle spécifié avec son schéma déjà attaché, et bien sûr que vous avez déjà un require pour mongoose au moins dans le champ d'application.

De même, vous pouvez simplement l'utiliser complètement en ligne:

mongoose.model( "Foo" ).find({},function(err,foos) {
// do something
});

En fin de compte, les «deux» approches, soit en utilisant require pour votre module défini et mongoose.model l'accesseur réalise généralement la même chose. La principale "différence" étant que require est centrée sur le chemin d'accès à la structure de votre application. Tandis que mongoose.model inspecte le propre «registre» de mangouste des données de modèle définies et récupère le «service» requis par son nom.

Par conséquent, en utilisant mongoose.model peut être considéré comme "plus propre" dans de nombreux cas, mais d'un autre côté require peut être plus conforme à la logique des autres importations de modules que d'autres sont habitués au style.

Cela revient vraiment à coder les modèles et le style qui vous conviennent le mieux. Bien que "basé sur le nom", le mongoose.model le style se prête un peu plus facilement au code "dynamique" pour rappeler le modèle requis, par rapport à l'importation à partir d'un "chemin" dans votre application.

Considère ceci:

async.each(["Foo","Bar"],function(modelName,callback) {
mongoose.model(modelName).remove({},callback);
},function(err) {
//done
});

Comme exemple d'appel programmatique qui n'a pas besoin require pour un modèle enregistré.