[node.js] 요구할 인수 전달 (모듈을로드 할 때)

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) {
  ...
};


답변