我是JS的新手,我有一个简单的问题。我正在编写一个node_redis代码来连接到db。 我创建了一个db模块,其中有一个init函数来启动连接。 该模块还有另一个查询db的函数。对于查询,我将需要第一个函数中的连接(dbConnection)对象,然后在第二个函数中使用它。我该怎么做呢?我可以通过使用全局变量来完成它,但大多数地方告诉我它是一个坏主意。
对不起,如果问题很愚蠢,我正在学习如何编码。谷歌的结果告诉我,可以通过将其作为对象属性传递来完成。但我不知道这是否是在我的背景下做事的正确方法,甚至不知道如何去做。
var redis = require('redis');
module.exports = redisDb = {
// Initialize the module. Invokes callback when ready (or on error)
init: function(config, callback) {
// Open the database connection
var dbConnection = redis.createClient(config.db.port, config.db.host, {no_ready_check: true});
dbConnection.auth(config.db.authKey, function() {
console.log("Connected!");
console.log(dbConnection.keys('*'));
});
dbConnection.on('connect' , log('connect'));
dbConnection.on('ready' , log('ready'));
dbConnection.on('reconnecting', log('reconnecting'));
dbConnection.on('error' , log('error'));
dbConnection.on('idle' , log('idle...'));
dbConnection.on('end' , log('end'));
function log(type) {
return function() {
console.log(type, arguments);
}
}
callback("callback - Connected");
},
getValue: function(key, callback) {
dbConnection.hgetall("hosts", function (err, obj) {
console.dir(obj);
});
}
};
编辑: 尝试了另一种方式仍然失败。
module.exports = redisDb = (function() {
var config = require('../config');
var redis = require('redis');
return {
connection: function(config) {
var dbConnection = redis.createClient(config.db.port, config.db.host, {no_ready_check: true});
dbConnection.auth(config.db.authKey, function() {
console.log("Authenticated!");
});
return dbConnection
},
getValue: function(connection, callback) {
connection.hgetall("hosts", function (err, obj) {
console.dir(obj);
});
}
}
})();
答案 0 :(得分:1)
现在,正如您所说的那样,将dbConnection
作为对象属性。
另一种方法是在init()
中调用getValue()
,这会导致每次需要某些值时建立不同的连接。
因为数据库连接是一种有价值的资源,我认为使用第二种变体更好。
当然,您需要从dbConnection
返回init()
。
答案 1 :(得分:0)
我通过简单地在父函数中声明连接来使代码工作。
module.exports = _redisDb = (function() {
var redis = require('redis');
var config = require('../config');
var dbConnection = redis.createClient(config.db.port, config.db.host, {no_ready_check: true});
dbConnection.auth(config.db.authKey, function() {
console.log("Authenticated!");
});
var getValue = function() {
dbConnection.hgetall("hosts", function (err, obj) {
console.dir(obj);
});
}
return {
getValue: getValue
}
})();
在上述工作中,我仍然希望有人告诉我如何在同一模块的函数之间传递变量/对象。