it-source

필요한 인수 전달(모듈 로드 시)

criticalcode 2023. 9. 8. 21:33
반응형

필요한 인수 전달(모듈 로드 시)

require를 사용하여 모듈을 로드할 때 인수를 전달할 수 있습니까?

로그인 기능을 제공하는 login.js 모듈이 있습니다.데이터베이스 연결이 필요하고 모든 모듈에서 동일한 데이터베이스 연결을 사용하기를 원합니다.이제 함수 로그인을 내보냅니다.데이터베이스 연결을 지정할 수 있는 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) {
  ...
};

언급URL : https://stackoverflow.com/questions/13151693/passing-arguments-to-require-when-loading-module

반응형