2

最新のマングースのアップデートでは、これまでのようにユーザーモデルを作成することはできなくなりました。アプリ全体で同じデータベース接続を共有する必要があります。

https://github.com/LearnBoost/mongoose/issues/1249

これは、もはや機能しない古い方法です。

./models/user.js

var mongoose = require('mongoose'), cfg = require('../config')
, Schema = mongoose.Schema
, db = mongoose.createConnection(cfg.mongo.uri, cfg.mongo.db);
...

module.exports = db.model('Item', ItemSchema);

上記のgithubの問題で提案されているように、db接続を再利用するにはどうすればよいですか?

var User = require('./models/user');コードベースのいくつかの異なる場所で使用しています。

4

1 に答える 1

9

オプション 1: 共有オブジェクトを使用する

私のモデル コードは似ていますが、モジュールを繰り返し要求する代わりに、アプリケーションの起動時にモジュールを 1 回だけ要求し、その結果を共有オブジェクトに割り当てます。たとえば、高速アプリを使用している場合は、app.locals.models.User = require('./models/user');. 次に、にアクセスできるものは何でもapp、require を必要とせずにモデルを見ることができます。


オプション 2: エクスポートされた関数で 1 つの変更を確認する

次のようにユーザー モジュールを定義できます。

var mongoose = require('mongoose');

var userSchema = new mongoose.Schema({name: String});

var User = null;

module.exports = function(db) {
  if (db && User === null) {
    User = db.model('User', userSchema);
  }
  return User;
};

アプリケーションを開始するときは、次のことを行うだけですrequire('./models/user')(db)。アプリケーション内の他のモジュールによる後続のdbrequire は、User一度だけ設定されるため、パラメーターを削除できます。

于 2012-12-14T07:26:59.460 に答える