从其他2个js文件中调用两次js文件会导致找不到该函数

时间:2016-06-16 04:11:11

标签: javascript node.js express

我有四个JavaScript文件如下:

API.js

var controller = require('./Controller');

var apifunction = new function(){
controller.a(function(result) {
   console.log("result: " + result)
})}

Controller.js

var bll = require('./BLL.js');

module.exports = 
{
   a: function(callback){
      bll.b(function(result){
        callback(result);
      })
   }

  c: function(callback){
     callback(result);
     }
  }
}

BLL.js

var controller = require('./Controller.js');

module.export = 
{

  b: function(callback){
    controller.c(function(result){
      callback(result);
    })
  }

}

所以API函数调用控制器中的一个函数,再次调用 BLL 中的 b函数

BLL 中,它再次调用控制器中的 c函数,但后来我得到错误:controller.c不是函数

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

Controller.js和BLL.js彼此“需要”,这就是问题所在,人们会得到一个空模块(占位符)。

您可以重构它,删除双向“require”,例如将一个模块作为参数传递给另一个。

答案 1 :(得分:0)

考虑将函数controller.c分离成单独的文件...例如。 commonC.js

CommonC.js

module.exports = 
{
  c: function(callback){
     callback(result);
     }
  }
}

Controller.js

var bll = require('./BLL.js');

module.exports = 
{
   a: function(callback){
      bll.b(function(result){
        callback(result);
      })
   }
}

BLL.js

var controller = require('./Controller.js');
var commonC = require('./CommonC.js');

module.export = 
{

  b: function(callback){
    commonC.c(function(result){
      callback(result);
    })
  }
}

或者,如果重构不是一个选项(你应该重构),你可以将require放在函数中,以便在调用函数时执行。

Controller.js

module.exports = 
{
   a: function(callback){
      var bll = require('./BLL.js');
      bll.b(function(result){
        callback(result);
      })
   }

  c: function(callback){
     callback(result);
     }
  }
}