node.export中的module.exports = function的含义

时间:2015-07-18 14:46:02

标签: javascript node.js

我正在使用node.js迈出第一步,显然我尝试做的第一件事就是从模块中导出一些数据,所以我尝试了这个简单的案例:

dummy.js:

var user = "rally";

module.exports = {
  user:user
};

并且需要来自不同的文件:

var dummy = require('./dummy.js');
console.log(dummy.user); // rally

到目前为止一切顺利,每件事都有效,但现在我潜入了代码中,在模块的开头有这个定义:

module.exports = function(passport,config, mongoose) {}

我不明白它的含义是什么,我怎么能用它。 只是为了试图理解我在这个抽象函数中定义了一些变量但是无法从任何其他文件中获取它们的值。 任何想法如何从像这样定义的模块中导出变量..?所以例如我可以要求这个模块并获得“Dummy”变量并在不同的文件中使用它

module.exports = function(passport,config, mongoose) {
var dummy = "Dummy";
}

2 个答案:

答案 0 :(得分:7)

它与第一个完全相同,只是它导出一个函数而不是一个对象。

导入模块的模块可以调用该函数:

var dummy = require('./dummy.js');
dummy();
  

任何想法如何从这样定义的模块中导出变量..?

由于函数只是对象,您还可以为其指定属性:

module.exports = function(passport,config, mongoose) {}
module.exports.user = 'rally';

但是,我认为如果模块直接导出函数,则预期会减少。您可能最好将该函数导出为自己的导出:

exports.login = function(passport,config, mongoose) {}
exports.user = 'rally';

答案 1 :(得分:2)

什么是模块?

模块将相关代码封装到单个代码单元中。创建模块时,可以将其解释为将所有相关功能移动到文件中。

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

dummy.js的实用程序在其封装的代码可以在其他文件中使用时会增加。这是通过使用exports

实现的

他们如何被调查?

您可以在module.exports块之外声明您的函数。导出中的函数可以与变量或任何其他对象完全相同的方式调用。

示例

//dummy.js

var myVariable = "foo";
var myFunction = function(){
     //some logic
};

module.exports{

      myVariable : myVariable,
      myFunction : myFunction,

      myVariableTypeTwo : "bar",
      myFunctionTypeTwo : function () {
           //some logic
      }

}

我们现在可以从任何js文件中访问dummy.js的公开方法作为属性。

var dummy = require('./dummy.js');

dummy.myVariable; //foo
dummy.myFunction();

dummy.myVariableTypeTwo; //bar
dummy.myFunctionTypeTwo();

注意

在上面的代码中,我们可以用exports替换module.exports并获得相同的结果。如果这看起来令人困惑,请记住exports和module.exports引用相同的对象。