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

node.js: access exported function from other file

本文关键字:函数 文件 其他 js 访问 node      更新时间:2023-09-26

我有以下代码:

// 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.myMHod()之上执行console.log(jira)jyst时,我看到整个js文件都被注销了。

我该怎么做?

请告知,

谢谢!

由于您在jira中的module.exports是一个函数,您需要执行它才能获得返回值(您可以这样要求它:var jira = require('./jira')();,它将返回导出的函数)。

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

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

这样做的目的是,当您需要jira时,它将运行到代码中(在本例中,定义函数),并返回

当您需要一个模块时,require(...)的结果就是该模块中分配给module.exports的结果。在这种情况下,您正在分配一个函数,该函数使用所需的方法返回对象。

因此,要么将其用作:

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

或者将jira.js更改为类似的内容

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

这简化为将导出的对象设置为变量,然后将module.exports设置为该变量。然后在导入时,只需要该文件并将导入的文件用作普通对象。

导出:

// 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(...);
     ..
  }
  ..