从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