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