我是 JS 新手,我有一个简单的问题。我正在编写一个 node_redis 代码来连接到数据库。我创建了一个 db 模块,其中有一个 init 函数来启动连接。该模块还有另一个查询数据库的功能。对于查询,我需要第一个函数中的连接(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);
});
}
}
})();