How do you call a function from within another function in a module.exports
declaration?
Here's some simplified code.
In my app.js, I do the following:
var bla = require('./bla.js');
console.log(bla.bar());
and inside of bla.js is
module.exports = {
foo: function (req, res, next) {
return ('foo');
},
bar: function(req, res, next) {
this.foo();
}
}
I'm trying to access the function foo
from within the function bar
, and I'm getting:
TypeError: Object # has no method 'foo'
If I change this.foo()
to just foo()
I get:
ReferenceError: foo is not defined
You could declare your functions outside of the module.exports block.
var foo = function (req, res, next) {
return ('foo');
}
var bar = function (req, res, next) {
return foo();
}
Then:
module.exports = {
foo: foo,
bar: bar
}
I think I got it. I just changed this.foo()
to module.exports.foo()
and it seems to be working.
If someone has a better or more proper method, please feel free to correct me.
You can also save a reference to module's global scope outside the (module.)exports.somemodule definition:
var _this = this;
exports.somefunction = function() {
console.log('hello');
}
exports.someotherfunction = function() {
_this.somefunction();
}
Another option, and closer to the original style of the OP, is to put the object you want to export into a variable and reference that variable to make calls to other methods in the object. You can then export that variable and you're good to go.
var self = {
foo: function (req, res, next) {
return ('foo');
},
bar: function (req, res, next) {
return self.foo();
}
};
module.exports = self;
You can also do this to make it more concise and readable. This is what I've seen done in several of the well written open sourced modules:
var self = module.exports = {
foo: function (req, res, next) {
return ('foo');
},
bar: function(req, res, next) {
self.foo();
}
}
simply return from this.foo();
bar: function(req, res, next) {
return this.foo();
}