require を使用してモジュールをロードするときに引数を渡すことは可能ですか?
ログイン機能を提供するモジュール login.js があります。このモジュールにはデータベース接続が必要で、すべてのモジュールで同じデータベース接続を使用するようにしたいと考えています。ここで、データベース接続を指定できる関数 login.setDatabase(...) をエクスポートすると、問題なく動作します。ただし、モジュールをロードするときに、データベースやその他の要件を渡す方がよいでしょう。
var db = ...
var login = require("./login.js")(db);
私は NodeJS についてはまだあまり詳しくなく、通常は Java と Spring Framework を使用して開発しているので、そうです...これはコンストラクター インジェクションです :) 上記で提供したコードのようなものを実行することは可能ですか?
ベストアンサー1
あなたのコメントに基づいてこの答え、あなたがやろうとしていることは次のように行います:
module.exports = function (app, db) {
var module = {};
module.auth = function (req, res) {
// This will be available 'outside'.
// Authy stuff that can be used outside...
};
// Other stuff...
module.pickle = function(cucumber, herbs, vinegar) {
// This will be available 'outside'.
// Pickling stuff...
};
function jarThemPickles(pickle, jar) {
// This will be NOT available 'outside'.
// Pickling stuff...
return pickleJar;
};
return module;
};
私はほぼすべてのモジュールをそのように構成しています。うまく機能しているようです。