gpt4 book ai didi

node.js:导入模块的范围

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:11 24 4
gpt4 key购买 nike

我正在使用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 中,我 require('provider') ,其中定义了两个提供程序。

然后我这样做:

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

现在,我创建了一个名为 dao 的模块(我来自 java/spring 的角度:-))。由于我没有使用“var”,因此这两个变量以及提供程序都可以在我的 DAO 中访问。如果我使用“var”,则无法访问提供程序。

我的问题是:

如果我想在整个应用程序中仅使用提供程序的一个实例,我该怎么做?

提前致谢!

最佳答案

设置全局变量(不使用 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')();

关于node.js:导入模块的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10736295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com