2015-06-19 15 views
0

節點菜鳥在這裏......隨着出口試驗和要求......如何讓節點導出正常工作?

我已經包含此代號爲GoogleHomePage.js JavaScript文件:

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

    } 
} 

然後我想用另一個文件要求命名FileB.js這樣的:

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

當g.Home()運行時,我得到了一個未定義......然而,當我看到在調試克,我可以看到,它有一個名爲主頁功能...

如果我在控制檯窗口中鍵入g.Home,它將顯示功能代碼...

如何獲得g.Home()來執行?這是因爲沒有g對象,例如var x = new g()還是var x = new GoogleHomePage()?

+0

你是什麼意思你得到未定義? – thefourtheye

+1

你爲什麼在另一個函數裏面設置'Home'? – thefourtheye

+0

@thefourtheye我不想在另一個功能中設置主頁,我試圖從另一個文件中調用它,以便瀏覽器導航到http://www.google.com ... –

回答

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(); 
+0

謝謝!讓我試試看。 –

+1

@JohnPeters你可以通過googling「nodejs commonjs」瞭解更多。例如,https://egghead.io/lessons/nodejs-commonjs-basics-introduction或http://elegantcode.com/2011/02/04/taking-baby-steps-with-node-js-commonjs-and -creating-custom-modules/ – Cymen

+0

Cymen,感謝指針......我現在工作了!!! :) –

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是不必要的。