Javascript Express-将mysql连接传递到脚本

Javascript Express-将mysql连接传递到脚本,javascript,node.js,express,Javascript,Node.js,Express,我使用app.js所需的所有参数定义了mysql连接,如何使routes/中的其他脚本默认可见,而不需要或重新定义mysql参数,只需使用client.query..?您可以将mysql连接插入其他脚本,如下所示: app.js var mysqlConnection = new Conection(params); require('controller/main.js)(mysqlConnection); var mysqlConnection = new Conection(params

我使用app.js所需的所有参数定义了mysql连接,如何使routes/中的其他脚本默认可见,而不需要或重新定义mysql参数,只需使用client.query..?

您可以将mysql连接插入其他脚本,如下所示:

app.js

var mysqlConnection = new Conection(params);
require('controller/main.js)(mysqlConnection);
var mysqlConnection = new Conection(params);
var news = require('model/news.js)(app, mysqlConnection);
news.list(function(err, news) {
    // Do something
});
main.js

module.exports = function(mysqlConnection) {
    // You can access your mysql connection here
};
更新:

您可以以相同的方式注入多个变量。如果需要,您还可以从模块导出方法:

app.js

var mysqlConnection = new Conection(params);
require('controller/main.js)(mysqlConnection);
var mysqlConnection = new Conection(params);
var news = require('model/news.js)(app, mysqlConnection);
news.list(function(err, news) {
    // Do something
});
新闻网

module.exports = function(app, mysqlConnection) {
    var methods = {};
    // mysql connection and app available from here
    methods.list = function(cb) {
        mysqlConnection.list(function(err, data) {
            cb(err, data);
        });
    };

    return methods;
};

我使用的一种模式是在模块中设置一次db对象并将其导出:我们将其称为utils/mySQL.js

然后我可以在任何需要的地方都需要db对象。由于requires是缓存的,因此实际上不会多次调用setup方法

在app.js中:

var db = require('./utils/mySQL.js');
...
在models/user.js中:

var db = require('../utils/mySQL.js');
...
最后一个不推荐的选项是污染全局名称空间。这似乎是你真正想要的答案:

//set up your db
...
// and now make it available everywhere:
global.client = db.client
现在,您可以在所有模块中神奇地使用客户机对象,甚至不需要它

尽管如此,有很多原因导致globals不好:

如果您的代码和其他代码定义了全局变量,它们可能会发生冲突并相互覆盖。 很难找到定义db/客户机对象的位置,等等。
在使用require的mysqlConnection中,我可以传递app变量吗?与require“..”变量类似,variable在此没有找到太多文档。此方法意味着您不必像@Vadim的答案那样将mysqlConnection传递到每个模块中。同样,您需要user.js中的mysql连接,而另一个答案通过require传递一次,您可以执行类似module.exports.list=functionreq,res,mysql。。我想..可能是@EdJr的复制品。。你有没有看一下问题之间的日期差异?2012年8月7日和2013年5月28日。。。你看到区别了吧?我有很好的理由标记这个问题。很好地总结了推理,它与副本本身有有用的链接这一事实是另一个很好的例证。