2012-12-03 20 views

回答

9

您可以將app對象肯定傳遞給其他模塊,並調用use那裏。當然,中間件功能按照它們被添加的順序執行,因此您必須非常小心以確保您按照正確的順序呼叫use

app.js

var app = express(); 
// ... 

app.use(express.logger()); // first middleware function 

var someOtherModule = require('./mod.js'); 
someOtherModule.init(app); 

app.use(express.static()); // last middleware function) 

mod.js

exports.init = function(app) { 
    app.use(function(req, res, next) { 

    }); 
}; 

至於實際注入在堆棧中間的中間件功能(你已經稱爲後app.use帶有一組中間件功能),但沒有文檔說明。 use僅在堆棧的末尾添加了一個函數。

use實際上是由連接在proto.js提供:

app.use = function(route, fn){ 

    ... 

    this.stack.push({ route: route, handle: fn }); 

    return this; 
}; 

技術上,你可以用自己app.stack撥弄,但我不會這麼做。你會弄亂沒有記錄的實現細節,這很容易改變。換句話說,未來可能會更新至 Connect或Express可能會破壞您的應用。

+0

謝謝 - 我認爲沒有辦法(想不出一個簡單的方法來說明它將放在哪裏)。我可能會按照你在前面提出的方式去做。 – MrPurpleStreak

+0

表示該訂單很重要!謝謝! – JWally

0

我不明白是什麼問題?

可以在中間件增加任何功能:

app.use(function(req,res,next){ 
    //some munipulation with req and res 
    next() 
}) 

您可以將此app送入你moduls

+1

我認爲這個問題是'app.use'總是添加您的中間件功能*堆棧年底*,所以中間件前面添加就可以完成您的請求函數之前得到運行的機會。 – josh3736

+0

例如?何時需要? –

+0

爲了讓事情更加模塊化 - 所以我希望所有事情都通過authenticate.js中的身份驗證來完成 - 它會在那裏創建護照對象,而不是將它傳遞出去,而寧願傳遞應用程序,然後使用該模塊添加護照。初始化和passport.session中間件只是在express.session之後,但在路由器 – MrPurpleStreak

1

您可以使用app.use(FN)或堆疊起來是這樣的:

app.get('/foo', fn1, fn2, fn3); 

簽名必須始終是相同的,調用next();

function(req, res, next) { 
    next(); 
} 
相關問題