我用所有必要的参数定义了mysql连接,默认情况下app.js
如何使其他脚本可见routes/
,而不需要或重新定义mysql参数,只需使用client.query(..)
?
问问题
1474 次
2 回答
4
我使用的一种模式是在一个模块中设置我的db
对象一次并导出它:(我们称之为utils/mySQL.js
)
//I haven't used real mysql in node so excuse the pseudo-syntax:
var db = require('mysql-driver-thingy');
db.connect('localhost', 'sqlport', options...);
db.otherSetupFunctions();
console.log("Finished db setup. You should only see this message once! Cool.");
module.exports = db;
然后我可以在我需要的db
任何地方都需要该对象。由于require
s 被缓存,这实际上并没有多次调用 setup 方法。
在 app.js 中:
var db = require('./utils/mySQL.js');
...
在模型/user.js 中:
var db = require('../utils/mySQL.js');
...
最后一个不推荐的选择是污染全局命名空间。这似乎是您真正想要的答案:
//set up your db
...
// and now make it available everywhere:
global.client = db.client
您现在可以在所有模块中神奇地使用客户端对象,甚至不需要它。
但是,全局变量不好的原因有很多:
- 如果您的代码和其他代码定义了全局变量,它们可能会发生冲突并相互覆盖。
- 很难找到您定义
db
/client
对象等的位置。
于 2012-08-07T12:03:36.203 回答
3
您可以将 mysql 连接注入到其他脚本中,如下所示:
应用程序.js
var mysqlConnection = new Conection(params);
require('controller/main.js)(mysqlConnection);
main.js
module.exports = function(mysqlConnection) {
// You can access your mysql connection here
};
更新:
您可以以相同的方式注入多个变量。如果需要,您仍然可以从模块中导出方法:
应用程序.js
var mysqlConnection = new Conection(params);
var news = require('model/news.js)(app, mysqlConnection);
news.list(function(err, news) {
// Do something
});
新闻.js
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;
};
于 2012-08-07T11:30:30.583 回答