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

mongoose.model ('Foo', FooSchema) vs požadovať ('./models/Foos') - node.js, mongodb, mongoose

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ď č. 1

Na 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.