に必要なすべてのパラメーターを使用して mysql 接続を定義しました。mysql パラメーターを必要としたり再定義したりせずに、デフォルトでapp.js
他のスクリプトから見えるようにするにはどうすればよいですか?routes/
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
な場所ならどこでもオブジェクトを要求できます。s はキャッシュされるためrequire
、実際には 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
クライアント オブジェクトを必要とせずに、すべてのモジュールで魔法のように使用できるようになりました。
ただし、グローバルが悪い理由はたくさんあります。
- 自分のコードと他のコードでグローバルを定義すると、それらが競合して互いに上書きする可能性があります。
db
/client
オブジェクトなどを定義した場所を見つけるのは難しいです。
于 2012-08-07T12:03:36.203 に答える
3
次のように、mysql接続を他のスクリプトに挿入できます。
app.js
var mysqlConnection = new Conection(params);
require('controller/main.js)(mysqlConnection);
main.js
module.exports = function(mysqlConnection) {
// You can access your mysql connection here
};
アップデート:
複数の変数を同じ方法で注入できます。また、これが必要な場合は、モジュールからメソッドをエクスポートすることもできます:
app.js
var mysqlConnection = new Conection(params);
var news = require('model/news.js)(app, mysqlConnection);
news.list(function(err, news) {
// Do something
});
news.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 に答える