6

次の Node.js ディレクトリ構造があります。

|--app/
   |--app.js
   |--routers/
      |--index.js/
   |--models/
      |--schemas.js
      |--post.js

app.jsに、このような行がありますmongoose.connect('mongodb://localhost/' + config.DB_NAME);。schema.js:

var mongoose = require('mongoose')
    , Schema = mongoose.Schema
    , ObjectId = Schema.ObjectId;

var PostSchema = new Schema({
    title: String
    , author: String
    , body: String
    , creataAt: { 
        type: Date
        , default: Date.now
    }
});

// other schemas goes here

module.exports.PostSchema = PostSchema;

post.js:

var mongoose = require('mongoose')
    , PostSchema = require('./schemas').PostSchema
    , PostModel = mongoose.model('Post', PostSchema);

module.exports = PostModel;

そしてindex.jsには、次のような行があるかもしれません: var PostModel = require('../models/post');. 上記のすべてのファイルにはmongooseが必要です。schemas.jsの目的は、プログラマーがデータベースのスキーマを 1 つのファイルで把握できるようにすることです。ただし、この実装により冗長性が生じ、オーバーヘッドが増えるのではないかと思います。あちこちでマングースが必要になるからです。引数として渡す必要がありますか?

4

2 に答える 2

9

パフォーマンスのみを気にする場合は、その必要はありません。http://nodejs.org/docs/latest/api/modules.html#modules_cachingに従って:

キャッシング

モジュールは、最初にロードされた後にキャッシュされます。これは、(とりわけ) を呼び出すたびrequire('foo')に、同じファイルに解決される場合、まったく同じオブジェクトが返されることを意味します。

を複数回呼び出してrequire('foo')も、モジュール コードが複数回実行されることはありません。これは重要な機能です。これにより、「部分的に完了した」オブジェクトを返すことができるため、サイクルが発生する場合でも推移的な依存関係をロードできます。

モジュールでコードを複数回実行する場合は、関数をエクスポートして、その関数を呼び出します。

requiringしたがって、実際には毎回マングースではありません。むしろ、最初の以降は毎回、キャッシュされた Mongoose モジュールが返されます。

于 2012-06-28T02:21:29.977 に答える