我正在使用node.js并基于此wonderful tutorial我创建了两个提供程序(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中我要求('provider')定义两个提供者。
然后我这样做:
schemaProvider = new SchemaProvider('192.168.0.50', 27017);
entityProvider = new EntityProvider('192.168.0.50', 27017);
现在,我创建了一个名为dao
的模块(我来自java / spring透视:-))。因为我没有使用“var”,所以我的DAO中都可以访问变量和提供者。如果我使用“var”,则无法访问提供者。
我的问题是:
如果我想在整个应用程序中只使用提供程序的一个实例,我该怎么做?
提前致谢!
答案 0 :(得分: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')();