3
比方說,我有以下app.js(顯然非常簡體):從node.js的模塊中調用app.js的函數?
var express = require('express'),
app = express.createServer();
// include routes
require('./lib/routes')(app);
// some random function
var foo = function() {
return 'bar';
};
// another random function
var foo2 = function() {
return 'bar2';
};
然後,我有路由模塊:
module.exports = function(app){
app.get('/some/route', function(req, res){
var fooBar = foo(),
fooBar2 = foo2();
res.end(fooBar + fooBar2);
});
};
這顯然因爲富不工作, foo2沒有在模塊中定義。有沒有辦法使這項工作,或至少有不同的模式,以更好地完成這件事?
原始問題和這個被接受的答案都暗示'module.exports'是一個被調用的函數。不是。這是一個包含函數的對象。同樣,問題和這個答案在定義的大括號之後有一個尾隨的「)」。例如'module.exports = function(app){..})' - 一件事情永遠不會執行。另一方面,它應該像'module.exports.myfunc = function(args){...}'或'module.exports = {myfunc1:function(){...},myfunc2:function(){。 ..}}';好吧,這是一個老問題,但爲了新手,它需要澄清。 – unsynchronized 2014-06-13 06:20:47
右大括號是一個錯誤。 'module.exports'可以設置爲一個函數。它非正式地稱爲亞綱模式。一探究竟。 – 2014-06-13 08:41:39
我意識到它可以設置爲任何你喜歡的東西,包括一個隨機數。這一切都取決於你是否想要遵循標準,或者只是剽竊,而不是關心是否有人想使用你的代碼。畢竟你根本不用模塊。整個觀點是遵循一個慣例。如果你打算這樣做,一個可接受的方式是導出一個名爲substack的對象或函數,它可以做任何你想做的事情。 – unsynchronized 2014-06-13 10:08:30