2013-01-19 35 views
1

我是JS的新手,我有一个简单的问题。我正在编写一个node_redis代码来连接到数据库。 我已经创建了一个db模块,其中有一个init函数来启动连接。 该模块还有另一个查询数据库的功能。对于查询,我将需要第一个函数的连接(dbConnection)对象,然后在第二个函数中使用它。我该怎么做呢?我可以通过使用全局变量来完成,但大多数地方告诉我它是一个坏主意。JS - 将连接(对象)从一个函数传递到另一个

对不起,如果问题很蠢,我正在学习如何编码。谷歌的结果告诉我,它可以通过将其作为对象属性传递来完成。但是我不知道在我的背景下做事情的正确方法,或者甚至如何去做。编辑: 尝试另一种方式。仍然失败。

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

我通过在父函数中声明连接来使代码工作。

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 
    } 
})(); 

虽然上面的工作,就是我仍然希望有人告诉我,我怎么能在函数间传递变量/对象关在同一个模块。

1

现在有一种方法就像你说的使dbConnection一个对象属性一样。 另一种方法是在getValue()中调用init(),这会导致在每次需要某个值时都建立不同的连接。

因为数据库连接是一个宝贵的资源,所以我认为最好使用第二个变体。 当然,你需要从init()返回dbConnection

PS:全局变量最初是针对这些事情做出的,然后人们发现它们越少越好。这就是为什么使用全球变量被认为是不好的风格。

+0

但如果我从init调用dbconnection,那么每个查询都会创建一个新的连接。一般来说,我想重复使用相同的连接。 另外,我如何使dbconnection成为对象属性?你能告诉我吗? –

+0

其中一种方法是:{property_name:property_value_object} –

相关问题