0

に必要なすべてのパラメーターを使用して mysql 接続を定義しました。mysql パラメーターを必要としたり再定義したりせずに、デフォルトでapp.js他のスクリプトから見えるようにするにはどうすればよいですか?routes/client.query(..)

4

2 に答える 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 に答える