有沒有辦法在Express堆棧中注入中間件?我的意思是我想讓我的app.js設置主要的中間件鏈,然後調用其他模塊傳遞應用程序實例,他們可能想要插入更多的中間件(例如需要在正確位置添加護照的認證模塊)您可以在Node.JS Express應用程序中插入中間件
回答
您可以將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可能會破壞您的應用。
我不明白是什麼問題?
可以在中間件增加任何功能:
app.use(function(req,res,next){
//some munipulation with req and res
next()
})
您可以將此app
送入你moduls
我認爲這個問題是'app.use'總是添加您的中間件功能*堆棧年底*,所以中間件前面添加就可以完成您的請求函數之前得到運行的機會。 – josh3736
例如?何時需要? –
爲了讓事情更加模塊化 - 所以我希望所有事情都通過authenticate.js中的身份驗證來完成 - 它會在那裏創建護照對象,而不是將它傳遞出去,而寧願傳遞應用程序,然後使用該模塊添加護照。初始化和passport.session中間件只是在express.session之後,但在路由器 – MrPurpleStreak
您可以使用app.use(FN)或堆疊起來是這樣的:
app.get('/foo', fn1, fn2, fn3);
簽名必須始終是相同的,調用next();
function(req, res, next) {
next();
}
- 1. Node.js Express應用程序只在登錄時插入app.local.setting一次
- 2. 您可以在IIS/ASP.Net中的應用程序中創建子應用程序
- 3. 可以將Express路由用作Node.JS應用程序中的MVC控制器嗎?
- 4. 是否可以在應用程序之間傳輸Heroku插件?
- 5. 在iOS中可以使用插件應用程序嗎?
- 6. 您可以在Web應用程序中使用System.Runtime.Caching.MemoryCache嗎?
- 7. Heroku + Node.js(express) - 應用程序錯誤
- 8. Node.js應用程序,Express和Cloud Foundry
- 9. Hello World Node.js/Express應用程序錯誤
- 10. 啓動的Node.js Express應用程序
- 11. 在Node.js/express Web應用程序中生成PDF報告
- 12. 在Node.js(Express)中獲取signed_request Facebook的畫布應用程序
- 13. 您可以在IIS中託管ServiceStack Web應用程序嗎?
- 14. 您可以在雲中運行winform應用程序嗎?
- 15. 您可以在Mac應用程序中安裝Safari擴展嗎?
- 16. 您可以在Silverlight中構建整個應用程序嗎?
- 17. 您可以在Java EE Web應用程序中實現Vue.js嗎?
- 18. 我可以在Node.js/Express中動態導入TypeScript模塊嗎?
- 19. 如何讓您的GWT應用程序可插入?
- 20. 您是否可以在Azure Logic應用程序中爲SQL插入行設置可選的列?
- 21. 您是否可以將WebKit插件嵌入到Cococa應用程序中,而無需使用WebView
- 22. 您是否可以從其他應用程序中刪除應用程序?
- 23. Express 4從應用程序棧動態刪除中間件
- 24. 我可以以任何順序將中間件應用到應用程序嗎?
- 25. 您可以在WPF應用程序中使用sketchflow控件/樣式嗎?
- 26. 在WPF應用程序中嵌入Silverlight控件 - 可以嗎?
- 27. 是否可以在JavaFX應用程序中嵌入Swing組件?
- 28. 您可以使用控制檯應用程序中的LiveSDK嗎?
- 29. Node.js Express中間件:app.param vs app.use
- 30. 在達到路線時,您應該將邏輯放在Express應用程序中?
謝謝 - 我認爲沒有辦法(想不出一個簡單的方法來說明它將放在哪裏)。我可能會按照你在前面提出的方式去做。 – MrPurpleStreak
表示該訂單很重要!謝謝! – JWally