[英]JS - passing a connection(object) from one function to another
我是JS新手,我有一個簡單的問題。 我正在編寫一個node_redis代碼以連接到數據庫。 我創建了一個數據庫模塊,其中有一個初始化函數來啟動連接。 該模塊還具有另一個查詢數據庫的功能。 對於查詢,我需要第一個函數的連接(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);
});
}
}
})();
現在,一種方法就是您所說的使dbConnection
成為對象屬性。 另一種方法是在getValue()
調用init()
,這會在每次需要一些值時建立不同的連接。
因為數據庫連接是寶貴的資源,所以我想最好使用第二種方法。 當然,那么您需要從init()
返回dbConnection
。
PS:最初是為此類事情創建全局變量,然后人們看到它們越少越好。 這就是為什么使用全局變量被認為是不好的風格的原因。
我通過簡單地在父函數中聲明連接來使代碼起作用。
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
}
})();
在完成上述工作的同時,我仍然希望有人告訴我如何在同一模塊的函數之間傳遞變量/對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.