Po vytvorení schémy a umiestnení do priečinka modely. Pridá sa riadok kódu ako taký ...
// within "/models/Foos.js"
mongoose.model( "Foo", FooSchema )
... ale odkaz na túto schému je tiež pridaný do uzla app.js ako takého ...
var mongoose = require( "mongoose" );
require( "./models/Foos" )
...ale aký je rozdiel? Prečo je potrebné robiť to druhé (tj pridať odkaz na súbor schémy do globálneho objektu mongoose v rámci app.js), keď sme už niečo zdanlivo podobné urobili v samotnom súbore schémy (tj. FoosSchema .js), tým mongoose.model( "Foo", FooSchema )
. Čo sa deje?
odpovede:
0 pre odpoveď č. 1Na mongoose.model("Foo", FooSchema)
linka zaregistruje model globálne vo vnútri mongoose
, čo znamená, že je možné získať model cez mongoose.model("Foo")
kdekoľvek vo vnútri aplikácie. Avšak modelka Foo
je zaregistrovaný až po foos.js
je require
"d v aplikácii. Preto stále musíte niekde vyžadovať súbor, teda riadok require( "./models/Foos" )
EDIT: pomocou slučky vyžadujte, aby sa každý súbor nachádzal v modelovom adresári.
var normalizedPath = require("path").join(__dirname, "./models");
require("fs").readdirSync(normalizedPath).forEach(function(file) {
require("./models/" + file);
});
1 pre odpoveď č. 2
Vlastne to môže byť len:
var Foo = mongoose.model( "Foo" );
Po vykonaní počiatočnej deklarácie modelu, ktorá iba načíta zadaný model s už pripojenou schémou a samozrejme, že už máte require
pre mongoose
aspoň v rozsahu pôsobnosti.
Môžete ho tiež použiť úplne inline:
mongoose.model( "Foo" ).find({},function(err,foos) {
// do something
});
Nakoniec „dva“ pristúpi buď k použitiu require
pre váš definovaný modul a mongoose.model
prístupový pracovník spravidla dosahuje to isté. Hlavný „rozdiel“ je v tom require
je „cesta zameraná“ na štruktúru vašej aplikácie. Kde ako mongoose.model
kontroluje vlastný "register" definovaných údajov modelu a získava požadovanú "službu" podľa názvu.
Preto pomocou mongoose.model
možno v mnohých prípadoch považovať za „čistejšie“, ale na druhej strane require
môže byť viac v logike iných importov modulov, na aké sú ostatní zvyknutí štýlovo.
To skutočne závisí od kódovacích vzorov a štýlu, ktorý vám najlepšie vyhovuje. Aj keď ako "názov založený", mongoose.model
štýl sa v porovnaní s importom z „cesty“ vo vašej aplikácii hodí „dynamickejšiemu“ kódu o niečo ľahšie na vyvolanie požadovaného modelu.
Zváž toto:
async.each(["Foo","Bar"],function(modelName,callback) {
mongoose.model(modelName).remove({},callback);
},function(err) {
//done
});
Ako príklad programového volania, ktoré nie je potrebné require
pre registrovaný model.