require를 사용하여 모듈을로드 할 때 인수를 전달할 수 있습니까?
로그인 기능을 제공하는 login.js 모듈이 있습니다. 데이터베이스 연결이 필요하며 모든 모듈에서 동일한 데이터베이스 연결을 사용하고 싶습니다. 이제 데이터베이스 연결을 지정할 수있는 login.setDatabase (…) 함수를 내 보내면 제대로 작동합니다. 그러나 모듈을로드 할 때 데이터베이스 및 기타 요구 사항을 전달하고 싶습니다.
var db = ...
var login = require("./login.js")(db);
저는 NodeJS를 처음 사용하고 일반적으로 Java와 Spring Framework를 사용하여 개발하므로 생성자 주입입니다. 🙂 위에서 제공 한 코드와 같은 작업을 수행 할 수 있습니까?
답변
이 답변 에 대한 귀하의 의견에 따라 다음 과 같이하려는 작업을 수행합니다.
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;
};
나는 거의 모든 모듈을 그렇게 구성합니다. 나를 위해 잘 작동하는 것 같습니다.
답변
이것이 사람들에게 여전히 유용할지는 모르겠지만 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 )
답변
예. 당신의에서 login
모듈, 단지 소요 하나의 함수 수출 db
의 인수로합니다. 예를 들면 :
module.exports = function(db) {
...
};