[Node.js] 從module.exports中的另一個函數調用module.exports中的“本地”函數?


Answers

你可以在module.exports塊之外聲明你的函數。

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

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

然後:

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

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

}

我試圖從功能bar訪問函數foo ,我得到:

TypeError: Object # has no method 'foo'

如果我將this.foo()更改為foo()我會得到:

ReferenceError: foo is not defined




您還可以在模塊的export.somemodule定義之外保存對模塊全局作用域的引用:

var _this = this;

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

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



module.exports = function (){
return{
    adding: function(a ,b){
        return a+b;
    },
    test: function () {
        adding(a, b);
    }
}

}

我可以知道如何訪問“測試”功能中的“添加”嗎?




在NodeJs中,我採用了這種方法:

class MyClass {

    constructor() {}

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

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

module.exports = new MyClass();

由於Node的模塊緩存,這將只實例化類一次:
https://nodejs.org/api/modules.html#modules_caching