传递参数要求(加载模块时)

使用require加载模块时,是否可以传递参数?

我有模块,login.js提供loginfunction。 它需要一个数据库连接,我想要在我的所有模块中使用相同的数据库连接。 现在我导出一个函数login.setDatabase(…),让我指定一个数据库连接,并且工作得很好。 但我宁愿通过数据库和任何其他要求,当我加载模块。

var db = ... var login = require("./login.js")(db); 

我很新的NodeJS和通常开发使用Java和Spring框架,所以是的…这是一个构造函数注入:)是否有可能做类似于我上面提供的代码?

根据你在这个答案中的意见,我做你想做的事情是这样的:

 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; }; 

我几乎像所有的模块结构。 似乎对我很好。

是。 在你的login模块中,只需要导出一个以db为参数的函数。 例如:

 module.exports = function(db) { ... }; 

我不确定这是否对人们有用,但对于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 ) 

另一种解决方法是首先定义方法,然后通过“exports”使它们可用(module.exports和exports指向同一个对象)

 function kamehameha(name,fame){ } function bigbangkamehameha(name){ } exports.kamehameha=kamehameha; exports.bigbang=bigbangkamehameha; //bigbang refers to bigbangkamehameha