programing

module.exports 내의 "local" 함수를 module.exports 내의 다른 함수에서 호출하시겠습니까?

topblog 2023. 5. 18. 20:39
반응형

module.exports 내의 "local" 함수를 module.exports 내의 다른 함수에서 호출하시겠습니까?

어떻게 다른 함수 안에서 함수를 호출합니까?module.exports선언?

app.js
var bla = require('./bla.js');
console.log(bla.bar());
bla.js
module.exports = {

  foo: function (req, res, next) {
    return ('foo');
  },

  bar: function(req, res, next) {
    this.foo();
  }

}

기능에 액세스하려고 합니다.foo직무 내에서bar그리고 나는 다음과 같은 것을.

유형 오류: 개체 #에 'foo' 메서드가 없습니다.

내가 바뀌면,this.foo()정당하게foo()이해합니다.

참조 오류: foo가 정의되지 않았습니다.

바꾸다this.foo()로.module.exports.foo()

외부에서 기능을 선언할 수 있습니다.module.exports블록으로 막다

var foo = function (req, res, next) {
  return ('foo');
}

var bar = function (req, res, next) {
  return foo();
}

그러면:

module.exports = {
  foo: foo,
  bar: bar
}

또한 이 작업을 수행하여 보다 간결하고 읽기 쉽게 만들 수 있습니다.제가 잘 작성된 오픈 소스 모듈 중 몇 가지에서 본 것은 다음과 같습니다.

var self = module.exports = {

  foo: function (req, res, next) {
    return ('foo');
  },

  bar: function(req, res, next) {
    self.foo();
  }

}

(module.) 내보내기 밖에 모듈의 글로벌 범위에 대한 참조를 저장할 수도 있습니다.일부 모듈 정의:

var _this = this;

exports.somefunction = function() {
   console.log('hello');
}

exports.someotherfunction = function() {
   _this.somefunction();
}

OP의 원래 스타일에 가까운 또 다른 옵션은 내보낼 객체를 변수에 넣고 해당 변수를 참조하여 객체의 다른 메서드를 호출하는 것입니다.그런 다음 변수를 내보낼 수 있습니다. 그러면 바로 사용할 수 있습니다.

var self = {
  foo: function (req, res, next) {
    return ('foo');
  },
  bar: function (req, res, next) {
    return self.foo();
  }
};
module.exports = self;
const Service = {
  foo: (a, b) => a + b,
  bar: (a, b) => Service.foo(a, b) * b
}

module.exports = Service

Node.js 버전 13부터는 ES6 모듈을 활용할 수 있습니다.

export function foo() {
    return 'foo';
}

export function bar() {
    return foo();
}

클래스 접근 방식을 따릅니다.

class MyClass {

    foo() {
        return 'foo';
    }

    bar() {
        return this.foo();
    }
}

module.exports = new MyClass();

노드의 모듈 캐싱으로 인해 클래스가 한 번만 인스턴스화됩니다.
https://nodejs.org/api/modules.html#modules_caching

당신의 문제를 해결하기 위해, 나는 bla.js에 약간의 변경을 가했고 그것은 작동하고 있습니다.

var foo= function (req, res, next) {
  console.log('inside foo');
  return ("foo");
}

var  bar= function(req, res, next) {
  this.foo();
}
module.exports = {bar,foo};

그리고 app.js에 수정 사항이 없습니다.

var bla = require('./bla.js');
console.log(bla.bar());

내가 하는 일은 독립 실행형을(를)foo기능하고 두 장소 모두에서 참조합니다.

그런 식으로, 그것은 어떠한 문제도 방지합니다.this화살표 또는 정규 함수의 사용에 관계없이

function foo(req,res,next) {
  return ('foo');
}

그럼 제가 참고할게요foo두 곳에서

module.exports = {

  foo, // ES6 for foo:foo

  bar: function(req, res, next) {
    foo();
  }

}

만약 당신이 이렇게 한다면, 당신은 당신의 것을 잃게 될 것입니다.this호출 함수 내부의 개체 참조입니다.예:

    module.exports.a = function () {
      return true
    }
    
    module.exports.b = function() {
      return this.a();
    }

여기서 당신은 이것을 부를 때 그것이 참조하고 있기 때문에 문제를 얻을 것입니다.this의 목적.b기능.

이 문제를 해결하려면 저장해야 합니다.this화살표 함수에는 자체 함수가 없기 때문에 개체 참조 또는 화살표 함수를 사용this항상 외부를 참조할 수 있도록 합니다.this물건

이 문제를 해결하기 위해, 당신의 기능을 다음과 같이 수정하세요.

    module.exports.a = function () {
      return true
    }
    
    module.exports.b = () => {
      return this.a();
    }

언급URL : https://stackoverflow.com/questions/10462223/call-a-local-function-within-module-exports-from-another-function-in-module-ex

반응형