2014-12-03 46 views
0

我有一個模塊中的NodeJS其具有以下定義:出口中的NodeJS模塊的功能

var express = require('express'); 
var router = express.Router(); 

function myFunction(){ 
    //do some stuff 
}; 

router.get('/url', function(req, res, callback) { 
    var data = myFunction(); 
    res.render('index', { 
     item: data 
    }); 
}); 

module.exports = router; 

我希望它被稱爲在兩個方面:

HTTP請願書:

http://localhost:3090/url 

作爲另一模塊的功能:

var myModule = require('myModule'); 
var data = myModule.myFunction(); 

我可以通過HTTP以上述方式訪問模塊。但是,我不知道如何導出myFunction以用於其他模塊。我曾嘗試沒有成功如下:

router.myFunction = myFunction; 
module.exports = router; 

和:

module.exports = router; 
module.exports.myFunction = myFunction; 

我怎麼能解決這個problemn? 非常感謝你提前

+0

'module.exports.router = router; module.exports.myFunction = myFunction;'?聽起來更像是你想在兩個獨立的模塊中分割兩個模塊,儘管 – mvuajua 2014-12-03 16:27:22

回答

2

您可以通過這些更改

使用出口揭露多種功能

exports.router = router; 
exports.myFunction = myFunction; 

對包括他們兩人在其他文件(路徑Mymodule中可以按你的結構變化)你現在可以將它們包括爲

var routes= require('./myModule').router; 
var myfunction = require('./myModule').myFunction; 
+0

'function myFunction()'將工作得很好。顯式分配不是必需的。 – Rajit 2014-12-03 16:53:48

+0

是的,感謝提醒@Rajit – 2014-12-03 16:59:21

+0

謝謝!它給了我一個線索來解決它!這比我想象的要容易... – Genzotto 2014-12-03 17:20:29

1

另一種方法是總結出你在模塊結束時輸出的所有東西 - 基本上是c onstruct出口對象:

module.exports = { 

    myFunction: myFunction, 
    router: router, 
    someConstant: 42, 
    anotherValue: calculateThisValue() 
} 

在任何時候,module.exports是一個全球性的每個文件對象時,你需要的文件你。如果你在那裏什麼也沒放,那就是undefined。如果你把它變成一個函數,那它就是一個函數。如果你創建一個像上面那樣的對象,你會得到一個對象。您還可以導出基元,如日期,數組或其他您可能會想到的內容。