乙個請求傳送到伺服器,要經歷乙個生命週期,服務端要: 監聽請求-解析請求-響應請求,伺服器在處理這一過程的時候,有時候就很複雜了,將這些複雜的業務拆開成乙個個子部分,子部分就是乙個個中介軟體。對於處理請求來說,在響應發出之前,可以對請求和該級響應做一些操作,並且可以將這個處理結果傳遞給下乙個處理步驟
執行任何**。修改請求和響應物件。
終結請求-響應迴圈。
呼叫堆疊中的下乙個中介軟體
應用級中介軟體路由級中介軟體
錯誤處理中介軟體
內建中介軟體
第三方中介軟體
var express = require('express');
// req 修改請求
// res 響應物件
next(); // 當前中介軟體函式沒有結束請求/響應迴圈, 呼叫next(),
// 將控制權傳遞給下乙個中介軟體函式繼續往下處理,否則頁面到此會被掛起
});res.send('程式到我這裡就結束了,沒有next方法');
})
上面next()的說明: next()函式不是nodejs或者express的函式,而是傳遞中介軟體函式的第三變數,它是乙個統稱,可以為任意名稱,為了名稱統一,不造成混淆,約定為next(),呼叫它之後會將呼叫應用程式中的下乙個中介軟體程式
var express = require('express');
var requesttime = function(req,res, next)
var timetext = '當前時間為:';
timetext = timetext + req.requesttime; // 這裡的req.requesttime 是上乙個中介軟體函式傳遞過來的,
// 乙個業務處理流程,多個中介軟體函式對請求 req進行修改處理,並且通過next() 傳遞給下乙個中介軟體函式,
// 這樣下面的中介軟體函式都能拿到上乙個中介軟體函式處理的結果
res.send(timetext);
});res.send('程式到我這裡就結束了,沒有next方法');
})
下面是多個中介軟體函式,在各自函式中處理請求和響應的例子:
var express = require('express');
var middlea = function (req, res, next)
var middleb = function (req, res, next)
var middlec = function (req, res, next)
console.log(req.useone, req.usetwo, req.usethree);
// 應用程式經過了 middlea 應用程式又經過了 middleb 應用程式又經過了 middlec
// 上面的req裡面的引數就是在 不同的中介軟體函式中處理出來的
console.log(res.useone, res.usetwo, res.usethree);
// middlea 處理後的資料 middlea middleb 處理後的資料 middleb middlec 處理後的資料 middlec
// 上面的res的響應引數也是在上面乙個個中介軟體的響應res中逐步處理 累加而得
req.paramasquery += 3;
// req中paramasquery的引數經過中間不同的中介軟體函式處理,已經累加到7,
// 同理對於res 採用相同的處理方式,也可以達到這樣的效果
// 我們以此可以推出,如果處理乙個很複雜的程式時,我們乙個中介軟體函式只處理乙個步驟,
// 並且可以把該步驟處理後的結果,傳遞給下乙個中介軟體函式處理,
// 一種流水線的處理方式,職責專一,效率很快
res.send('req.paramasquery 經過不同的中介軟體處理後的結果是:' + req.paramasquery); // 7
}) console.log('5000 埠啟動了')
})
express 中介軟體函式,幫助拆解主程式的業務邏輯,並且每乙個的中介軟體函式處理的結果都會傳遞給下乙個中介軟體函式。想象一下工廠上流水線工人,在清洗乙個箱子的乙個場景。
第乙個人清洗側面,第二個人清洗底面,第三個人清洗頂面,。。。,這條流水線結束後,箱子也就清洗乾淨了。
各做各的,不相互影響,又彼此協作。
express中介軟體的理解
參考 express中介軟體分為三種內建中介軟體 自定義中介軟體 第三方中介軟體 express內建中介軟體 express.static 是express目前唯一內建的乙個中介軟體。用來處理靜態資源檔案.2.express自定義中介軟體 中介軟體使用時的第二個引數是乙個function req,r...
express中介軟體的理解
一 概念 來自官網 中介軟體函式能夠訪問請求物件 req 響應物件 res 以及應用程式的請求 響應迴圈中的下乙個中介軟體函式。下乙個中介軟體函式通常由名為next的變數來表示。中介軟體函式可以執行以下任務 如果當前中介軟體函式沒有結束請求 響應迴圈,那麼它必須呼叫next 以將控制權傳遞給下乙個中...
express中介軟體
中介軟體的本質就是乙個請求處理方法 函式 該方法接收三個引數 request請求物件 response響應物件 next下乙個中介軟體 把使用者從請求到響應的整個過程分發到多個中介軟體去處理。同乙個請求所經過的中介軟體的請求物件和響應物件都是同乙個請求物件和相應物件 不關心請求路徑和請求方法的中介軟...