Вызовите "локальную" функцию в модуле.экспорт из другой функции в модуле.экспорт?
как вызвать функцию внутри другой функции в module.exports
декларации?
вот несколько упрощенный код.
в моем приложении.js, я делаю следующее:
var bla = require('./bla.js');
console.log(bla.bar());
и внутри bla.js is
module.exports = {
foo: function (req, res, next) {
return ('foo');
},
bar: function(req, res, next) {
this.foo();
}
}
Я пытаюсь получить доступ к функции foo
из функции bar
, и я получаю:
TypeError: Object # has no method 'foo'
если я изменю this.foo()
просто foo()
Я:
ReferenceError: foo is not defined
9 ответов
Кажется, я понял. Я просто изменился this.foo()
до module.exports.foo()
и, похоже, это работает.
Если у кого-то есть лучший или более правильный метод, пожалуйста, не стесняйтесь исправить меня.
вы можете объявить свои функции вне модуля.блок экспорта.
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.)поставляемый.определение somemodule:
var _this = this;
exports.somefunction = function() {
console.log('hello');
}
exports.someotherfunction = function() {
_this.somefunction();
}
другой вариант и ближе к исходному стилю OP-поместить объект, который вы хотите экспортировать в переменную, и ссылаться на эту переменную для вызова других методов в объекте. Затем вы можете экспортировать эту переменную, и вы можете идти.
var self = {
foo: function (req, res, next) {
return ('foo');
},
bar: function (req, res, next) {
return self.foo();
}
};
module.exports = self;
const Service = {
foo: (a, b) => a + b,
bar: (a, b) => Service.foo(a, b) * b
}
module.exports = Service
в NodeJs я следовал этому подходу:
class MyClass {
constructor() {}
foo(req, res, next) {
return ('foo');
}
bar(req, res, next) {
this.foo();
}
}
module.exports = new MyClass();
это создаст экземпляр класса только один раз, из-за кэширования модуля узла:
https://nodejs.org/api/modules.html#modules_caching
исправить вашу проблему, я сделал несколько изменений в БПВ.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};
и никаких изменений в приложении.js
var bla = require('./bla.js');
console.log(bla.bar());
module.exports = function (){
return{
adding: function(a ,b){
return a+b;
},
test: function () {
adding(a, b);
}
}
}
могу ли я знать, как получить доступ к функции "добавление" из функции "тест"?