2012-05-24 65 views
0

我正在玩node.js并基于此wonderful tutorial我创建了两个提供程序(SchemaProvider和EntityProvider)。node.js:导入模块的范围

他们看都像是:

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我要求其中两个供应商的定义( '供应商')。

然后我做的:

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

现在,我创建了一个名为dao模块(我来自一个Java /弹簧观点:-))。由于我没有使用“var”,因此这两个变量和提供者都可以在我的DAO中访问。如果我使用“var”,那么提供者将无法访问。

我的问题是:

如果我想使用在整个应用程序只有一个供应商的情况下,我会怎么做呢?

在此先感谢!

回答

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')(); 
+0

我会测试它尽快:-) – Jan

+0

好吧,现在我有一个单身,但另一个问题。我调用this.getCollection,然后执行一个collection.find({})。toArray(function(err,arr){console.log(arr)});但没有任何反应:( – Jan