[node.js] module.exports의 다른 함수에서 module.exports 내에서 “local”함수를 호출 하시겠습니까?

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

}

function foo내에서 함수 에 액세스하려고하는데 다음 bar과 같은 결과가 나타납니다.

TypeError : 개체 #에 ‘foo’메서드가 없습니다

내가 this.foo()그냥 변경하면 다음 을 foo()얻습니다.

ReferenceError : 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.) exports.somemodule 정의 외부에 모듈의 전역 범위에 대한 참조를 저장할 수도 있습니다.

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