如何从模块中的另一个函数中调用一个函数。出口报关吗?

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,我得到:

TypeError: Object #没有foo方法

如果我将this.foo()更改为foo(),我得到:

引用错误:foo没有定义


当前回答

您还可以在(module.)导出之外保存对模块全局作用域的引用。somemodule定义:

var _this = this;

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

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

其他回答

为了解决你的问题,我在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());

你也可以这样做,使它更简洁和可读。这是我在几个写得很好的开源模块中看到的:

var self = module.exports = {

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

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

}
const Service = {
  foo: (a, b) => a + b,
  bar: (a, b) => Service.foo(a, b) * b
}

module.exports = Service

将this.foo()更改为module.exports.foo()

从Node.js版本13开始,你可以利用ES6模块。

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

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

遵循Class方法:

class MyClass {

    foo() {
        return 'foo';
    }

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

module.exports = new MyClass();

这将只实例化类一次,因为Node的模块缓存: https://nodejs.org/api/modules.html#modules_caching