私はJSが初めてで、簡単な質問があります。データベースに接続するための node_redis コードを書いています。接続を開始する init 関数がある db モジュールを作成しました。モジュールには、データベースを照会する別の関数もあります。クエリの場合、最初の関数の接続 (dbConnection) オブジェクトが必要になり、それを 2 番目の関数で使用します。どうすればいいですか?グローバル変数を使用してそれを行うことができますが、ほとんどの場所でそれは悪い考えだと教えてくれます。
質問がばかげている場合は申し訳ありませんが、コーディングの方法を学んでいます。Googleの結果は、それをオブジェクトプロパティとして渡すことで実行できることを教えてくれます。しかし、それが私の文脈で物事を行うための適切な方法であるかどうか、またはそれを行う方法さえもわかりません。
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);
});
}
}
})();