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