我应该在Node.js(Express)应用程序中将MySQL客户端定义在哪里?

时间:2012-01-06 19:17:50

标签: mysql node.js express

目前,我通过在node-mysql和特殊app.js中执行以下操作,为config/environment.js设置客户端连接:

var client = mysql.createClient({
  user:     'USER',
  database: 'DATABASE',
  password: 'PASSWORD',
  host:     'HOST'
});

app.configure(function(){
  ...
  app.set('client', client);
  ...
});

然后在我的客户端代码中,我只需要调用app.settings.client来使用MySQL客户端。

我不确定这是否是正确的方法,当我正在进行测试时它肯定不起作用,因为我需要一个正在运行的应用程序实例。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我认为更典型的方法是定义一个简单的中间件,将mysql客户端设置为请求的属性。例如:

var client = mysql.createClient({
      user:     'USER',
      database: 'DATABASE',
      password: 'PASSWORD',
      host:     'HOST'
    })

app.use(function(req, res, next) {
    req.mysql = client;
    next();
});

然后在您的路线处理程序中,您可以访问req.mysql。在您的测试用例中,您只需要以某种方式设置req.mysql,它应该非常简单。

答案 1 :(得分:2)

我认为有三种解决方案:

a)正如@Raynos在评论中建议的那样,使用app.set(key, value);设置db值,然后使用app.set(key)来获取该值。
b)将您的路由包装到一个接受数据库作为参数的函数中。 例如:

<强> sample_route.js

module.exports = function (db) {
  return function(req, res, next) {
    // db is accessible here
  }
}

<强> app.js

var = sample_route = require('./sample_route')(db);
app.get('/sample', sample_route);


c)创建一个可在任何地方访问的全局变量(不推荐):global.MY_DB = ...;