从module.exports中的另一个函数调用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(); } } 

我试图从functionbar访问函数foo ,我得到:

TypeError: Object # has no method 'foo'

如果我改变this.foo()只是foo()我得到:

ReferenceError: foo is not defined

我想我明白了。 我只是将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的原始风格,是将要导出的对象放入一个variables中,并引用该variables来调用对象中的其他方法。 然后你可以导出这个variables,你就可以走了。

 var self = { foo: function (req, res, next) { return ('foo'); }, bar: function (req, res, next) { return self.foo(); } }; module.exports = self; 

在NodeJs中,我采用了这种方法:

 class MyClass { constructor() {} foo(req, res, next) { return ('foo'); } bar(req, res, next) { this.foo(); } } module.exports = new MyClass(); 

由于Node的模块caching,这将只实例化一次类:
https://nodejs.org/api/modules.html#modules_caching

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