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

我有以下代码:

// 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文件被注销了。

我如何得到这个工作?

请指教,

谢谢!

因为你的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) { .. } 

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

要导出:

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