如何让Node Exports正常工作?

时间:2015-06-19 18:39:25

标签: javascript node.js

Node Noob here ...试验Exports和Require ...

我有一个名为GoogleHomePage.js的Javascript文件,其中包含以下代码:

var GoogleHomePage = function (){
    module.exports.Home = function () {
        var homepage = "http://www.google.com";
        browser.get(homepage);

    }
}

然后我想使用另一个名为FileB.js的文件中的require,如下所示:

var g = require("./GoogleHomePage.js");
g.Home();

运行g.Home()时,我得到Undefined ...但是,当我在调试器中查看g时,我可以看到它有一个名为Home的函数...

如果我在控制台窗口输入g.Home,它会显示功能代码......

如何让g.Home()执行?这是否发生,因为没有g对象,例如var x = new g()还是var x = new GoogleHomePage()?

2 个答案:

答案 0 :(得分:1)

您正在将导出包装在一个函数中,但它无法正常工作。试试这个:

GoogleHomePage.js:

module.exports = function() {
    var homepage = "http://www.google.com";
    browser.get(homepage);

}

FileB.js

var googleHomePage = require("./GoogleHomePage.js");
googleHomePage();

因此直接导出函数 - 不需要将它包装在奇数var GoogleHomePage = function (){ ... }构造中。

如果要在GoogleHomePage中导出多个内容,可以导出具有如下属性的对象:

GoogleHomePage.js:

module.exports = {
  Home: function() {
    var homepage = "http://www.google.com";
    browser.get(homepage);
  },

  SomethingElse: function() {
    // ...
  }
};

然后FileB.js看起来像:

var googleHomePage = require("./GoogleHomePage.js");
googleHomePage.Home();

或者你可以这样做:

var home = require("./GoogleHomePage.js").Home;
home();

答案 1 :(得分:1)

而不是

var GoogleHomePage = function (){
    module.exports.Home = function () {
        var homepage = "http://www.google.com";
        browser.get(homepage);

    }
}

你想要

module.exports = function () {
    var homepage = "http://www.google.com";
    browser.get(homepage);
}

module是相关模块的本地变量,exports是该对象的属性。函数GoogleHomePage永远不会在您的代码中调用,因此您的作业永远不会运行。

当您需要模块时,只需执行

var g = require('./GoogleHomePage');
g();

.js是不必要的。