node.js:从其他文件访问导出的函数

时间:2015-11-12 21:26:22

标签: javascript node.js express

我有以下代码:

// jira.js
var exports     = module.exports = {};

module.exports = function () {
  var exported = {};
  ..
  exported.myMethod= function (bugId, done) {
     ..
  }
  ..
 return exported;
};

我想在同一目录中使用其他文件bugs.js中的myMthod函数:

var exports     = module.exports = {};
var jira = require('./jira');

module.exports = function () {
  var exported = {};
  ..
  exported.secondMethod= function (bugId, done) {
     jira.myMethod(...) {
     }
     ..
  }
  ..
 return exported;
};

当我尝试从bugs.js访问myMthod时,我得到'undefined'。在调用jira.myMthod()之后执行console.log(jira)jyst时,我看到整个js文件已经注销。

我如何让这个工作?

请指教,

谢谢!

3 个答案:

答案 0 :(得分:1)

因为jira中的module.exports是一个函数,所以你需要执行它来获取返回的值(你可以这样做:var jira = require('./jira')();它将返回导出的函数)。

但在我看来,这是多余的。我更喜欢这种语法:

// jira.js

function myMethod (bugId, done) {
  ..
}
  ..
return {
  myMethod : myMethod
};

这将是什么,当你需要jira时,它将运行代码(在这种情况下,定义函数)并将返回它

答案 1 :(得分:1)

当您需要模块时,require(...)的结果是分配给该模块中module.exports的任何内容。在这种情况下,您将分配一个函数,该函数返回具有所需方法的对象。

所以要么将其用作:

var jira = require('./jira')();
jira.myMethod();

或将jira.js更改为:

var exports     = module.exports = {};
exports.myMethod = function (bugId, done) {
  ..
  }

答案 2 :(得分:0)

这简化了将导出的对象设置为变量,然后将module.exports设置为等于该var。然后在导入时,只需要该文件并使用导入的文件,就像它是普通对象一样。

要导出:

// jira.js
  var jira = {};
  ...
  jira.myMethod = function (bugId, done) {
     ...
  }
  ...
module.exports = jira;

访问:

//bugs.js
var jira = require('./jira');

  var bugs = {};
  ..
  bugs.secondMethod= function (bugId, done) {
     jira.myMethod(...);
     ..
  }
  ..