0

私はnode.jsで遊んでいて、この素晴らしいチュートリアルに基づいて2つのプロバイダー(SchemaProviderとEntityProvider)を作成しました。

それらは両方とも次のようになります。

var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;
var BSON = require('mongodb').BSON;
var ObjectID = require('mongodb').ObjectID;

EntityProvider = function(host, port) {
this.db = new Db('timerange', new Server(host, port, {auto_reconnect: true}, {}));
this.db.open(function() {
    console.log("Schema Provider has connected and may be used as of now.");
});
};

EntityProvider.prototype.getCollection = function(callback) {
this.db.collection('entity', function(error, collection) {
    if (error) {
        callback(error)
    } else {
        callback(null, collection);
    }

});
};

EntityProvider.prototype.findById = function(id /* The id to be found */, callback) {
this.getCollection(function(error, collection) {
    if (error) {
        callback(error);
    } else {
        collection.findOne({_id: id}, function(error, result) {
            if (error) {
                callback (error);
            } else {
                callback(null, result);
            }
        });
    }
});
};

app.jsでは、両方のプロバイダーが定義されているrequire('provider')が必要です。

それから私はします:

schemaProvider = new SchemaProvider('192.168.0.50', 27017); 
entityProvider = new EntityProvider('192.168.0.50', 27017); 

daoここで、 (java /springの観点から:-)という名前のモジュールを作成しました。「var」を使用しなかったため、DAOでは両方の変数とプロバイダーにアクセスできます。「var」を使用した場合、プロバイダーにアクセスできません。

私の質問は:

アプリケーション全体でプロバイダーのインスタンスを1つだけ使用したい場合、どうすればよいですか?

前もって感謝します!

4

1 に答える 1

4

グローバルの設定(varを使用しない)は本当に悪い習慣です。常にそれを避ける必要があります。

アプリケーション全体にプロバイダーのインスタンスのみを含める場合は、次のようにすることができます。

Provider.js

var providerInstance;

// define provider here

module.exports = function() {
  providerInstance = providerInstance || new Provider('192.168.0.50', 27017);
  return providerInstance;
}

このようにして、プロバイダーオブジェクトは一度だけ作成され、必要になるたびに再利用されます。

app.js

var provider = require('./provider')();

app2.js

// using the same object as in app.js
var provider = require('./provider')();
于 2012-05-24T11:16:17.560 に答える