[英]Middleware design pattern in Node.js: Connect
這個問題擴展了什么是Node.js的Connect,Express和“中間件”?
我正在學習Javascript - > Node.js - > Connect - > Express - > ...的路線,以便了解如何使用現代Web開發堆棧。 我有低層網絡的背景,所以開始使用Node.js的net
和http
模塊很容易。 使用服務器將請求路由到不同處理程序的一般模式看起來自然而直觀。
轉向Connect,我恐怕我不理解這個“中間件”的范例和數據的一般流程。 例如,如果我創建一些用於Connect ala的中間件;
// example.js
module.exports = function (opts) {
// ...
return function(req, res, next) {
// ...
next();
};
};
並在Connect via中“使用”它
var example = require('./example');
// ...
var server = connect.createServer();
// ...
server.use(example(some_paramater));
我不知道我的中間件何時被調用。 另外,如果我use()
其他middlware,我可以保證調用中間件的順序嗎? 更重要的是,我假設函數next()
用於調用下一個 (再次,我如何建立一個排序?)中間件; 但是,沒有傳遞參數(req,res,next)。 這些參數是否以某種方式隱式傳遞?
我猜測所使用的中間件模塊的集合是串聯在一起的,從http
回調開始 - >因此在初始請求回調和服務器結束響應的過程中添加了一堆功能。
我試圖理解中間件范例,以及信息/執行的流程。
任何幫助是極大的贊賞。 謝謝你的閱讀
中間件被稱為一系列功能 ,其順序基於具有匹配路由的中間件定義順序(時間)(如果適用)。
考慮到req
和res
對象正在鏈中傳播,因此您可以沿着鏈重用/改進/修改它們中的數據。
中間件有兩種常見用例: 通用和特定 。
通用就像您在上面的示例中定義的那樣: app.use
,它將適用於每個請求。 每個中間件都必須在內部調用next()
,如果它想繼續下一個中間件。
當你使用app.get('/path', function(...
這個實際的函數也是中間件,只是內聯定義。所以它完全基於中間件,並且沒有endware
:D
鏈順序基於定義順序。 因此,以同步方式或順序可靠的異步方式定義中間件非常重要。 否則,當中間件鏈相互依賴時,不同的中間件順序可能會破壞邏輯。
一些中間件可用於打破return next(new Error());
鏈return next(new Error());
。 例如,它對驗證或身份驗證中間件很有用。
中間件的另一個有用的模式是處理和解析請求數據,如cookie,或者這樣的app.use(express.bodyParser());
好例子app.use(express.bodyParser());
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.