2016-05-16 64 views
0

我用下面的代碼節點的應用程序(我把代碼結構的樣品)模塊出口approches

此代碼在server.js這是切入點nodeModule

function run() { 
    app.listen(3001, function() { 
     console.log("App is listenting on port 3000"); 
    }) 
} 

function addPath(args) { 
    plug.loadF(args.loadFolder); 
}; 

function preProcess (args) { 

    if (_.isEmpty(args)) { 
     run(); 
    } 
}; 

module.exports = preProcess(); 
module.exports ={ 
    run: run, 
    addPath: addPath 
} 

正如你可以看到出口的兩倍,在這種方式,我支持時,應用程序/模塊從CMD叫兩個選項(來電server.js)和是與下node_modules

  1. 使用代碼依賴於module.exports = preProcess(); module.exports = preProcess();是,如果我的應用程序/ nodeModule從像java/buildpack外部程序調用呼叫和無參數傳遞

  2. 出口runaddPath這是如果我的模塊在用戶應用程序中安裝爲node_moudule並且您想通過代碼調用這些API

我的問題是有更好的方法在節點上寫那些出口或者如果沒關係?

回答

1

您必須瞭解節點中提供的exports模塊。

module.exports對象由Module系統創建。有時候 這是不可接受的;許多人希望他們的模塊成爲某個類的實例。爲此,請將所需的導出對象分配給 module.exports。請注意,將期望的對象分配給導出將 簡單地重新綁定本地導出變量,這可能不是您想要執行的操作 。

https://nodejs.org/api/modules.html#modules_module_exports

深入淺出的出口模塊讓你在一個文件中,使得它可以在另一個文件中重複使用環繞整個代碼的功能。

因此,顯然一個文件只能導出一個對象。

在你上面的代碼因而你需要封裝你的方法到一個對象:

var server = {} 
server.run = function() { 
    app.listen(3001, function() { 
     console.log("App is listenting on port 3000"); 
    }) 
} 

server.addPath = function addPath(args) { 
    plug.loadF(args.loadFolder); 
}; 

server.preProcess = function (args) { 

    if (_.isEmpty(args)) { 
     run(); 
    } 
}; 

module.exports = server 

現在,任何其他的頁面,您可以簡單地做:

var server = require ("../../path/to/server.js") 
server.preProcess() // Call to preprocess function 
server.addPath() // Call to addPath function 
server.run() // Call to run function 

基本上我已經封裝所有的方法整合到一個「服務器」對象中,然後導出該對象。

+0

在這種情況下,最好使用'exports'而不是新的局部變量'server'。 – alexmac

+0

使用問題。我喜歡讓我的全局對象免於混亂。 –

+0

@SaleemAhmed - 感謝你的代碼,當你以代碼的形式調用代碼時,它會起作用,但如何在沒有節點代碼調用的情況下工作?如果其他程序通過CMD調用它並調用服務器。JS和它需要調用像運行服務器的過程...你可以請提供的例子,也應答module.exports = preProcess()? –