Express.js は、アプリの構造を決定する際に開発者に任せることがほとんどであることを知っています。私がやっていることが最善の方法です。
アプリでRedisを広範囲に使用していて、クエリを実行するためにredisクライアントを必要とする複数の「モデル」があるとします。次のように、メインのapp.jsでredisクライアントを初期化する方がよいでしょうか:
var db = redis.createClient();
var models = require('./models')(db);
var routes = require('./controllers')(models);
それとも、各モデルで redis を初期化してから、各コントローラーに目的のモデルを要求させる方がよいでしょうか?
後者のアプローチは、私が使用しているものであり、DRY ではありません。しかし、モデルのインスタンスを渡すのが最善の方法ですか? ここで複数のモデル/コントローラーをロードしていることに注意してください - 各モデルに redis クライアントを正しく渡すためにセットアップを変更する方法がわかりません。
//currently in models/index.js
exports.home = require('./home.js');
exports.users = require('./user.js');
TL;DR、私の質問は次のとおりです。
- MVCパターンアプリでredisクライアントを初期化するのに最適な場所は?
- このredisクライアントインスタンスを複数のモデルに渡す方法
require('./models')(db)
アップデート:
代わりに、モデル/コントローラーのオブジェクトを返すためindex.js
に使用する別のアプローチを試しました。module.exports
module.exports = function(models){
var routes = {};
routes.online = require('./home.js')(models);
routes.users = require('./user.js')(models);
return routes;
};
より良いアイデアのように思えますか?