使用require?
加载模块时是否可以传递参数我有module,login.js,它提供登录功能。它需要数据库连接,我希望在我的所有模块中使用相同的数据库连接。现在我导出一个函数login.setDatabase(...),它允许我指定一个数据库连接,并且工作得很好。但我宁愿在加载模块时传递数据库和任何其他要求。
var db = ...
var login = require("./login.js")(db);
我是NodeJS的新手,通常使用Java和Spring Framework开发,所以是的......这是一个构造函数注入:)是否有可能像我上面提供的代码那样做?
答案 0 :(得分:212)
根据您在this answer中的评论,我会按照以下方式执行您的操作:
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;
};
我构建了几乎所有模块。似乎对我有用。
答案 1 :(得分:30)
是。在login
模块中,只需导出一个以db
为参数的函数。例如:
module.exports = function(db) {
...
};
答案 2 :(得分:27)
我不确定这对人们是否仍然有用,但是对于ES6,我有办法做到这一点,我发现它很干净,很有用。
class MyClass {
constructor ( arg1, arg2, arg3 )
myFunction1 () {...}
myFunction2 () {...}
myFunction3 () {...}
}
module.exports = ( arg1, arg2, arg3 ) => { return new MyClass( arg1,arg2,arg3 ) }
然后你得到了预期的行为。
var MyClass = require('/MyClass.js')( arg1, arg2, arg3 )