深入理解express的中介軟體

2021-07-09 11:13:27 字數 3369 閱讀 8617

前面的文章裡也介紹過了,express 是乙個簡潔、靈活的node.jsweb 應用開發框架, 它提供一系列強大的特性,幫助你建立各種 web 和移動裝置應用。express專案的底層由許多的中介軟體在協同工作,可以這麼說,乙個express應用就是在呼叫各種中介軟體。

中介軟體是乙個可訪問請求物件(req)和響應物件(res)的函式,在 express 應用的請求-響應迴圈裡,下乙個內聯的中介軟體通常用變數next表示。中介軟體的功能包括:

注意:如果當前中介軟體沒有終結請求-響應迴圈,則必須呼叫next()方法將控制權交給下乙個中介軟體,否則請求就會掛起。使用可選則掛載路徑,可在應用級別或路由級別裝載中介軟體。可裝載一系列中介軟體函式,在掛載點建立乙個中介軟體系統棧。

// 沒有掛載路徑的中介軟體,應用的每個請求都會執行該中介軟體

(req, res, next) );

// 掛載至 /user/:id 的中介軟體,任何指向 /user/:id 的請求都會執行它

(req, res, next) );

// 路由和控制代碼函式(中介軟體系統),處理指向 /user/:id 的 get 請求

(req, res, next) );

// 乙個中介軟體棧,對任何指向 /user/:id 的 http 請求列印出相關資訊

(req, res, next)

, function

(req, res, next)

);

// 乙個中介軟體棧,處理指向 /user/:id 的 get 請求

(req, res, next) , function

(req, res, next) );

// 處理 /user/:id, 列印出使用者 id

(req, res, next) );

作為中介軟體系統的路由控制代碼,使得為路徑定義多個路由成為可能。在上面的例子中,為指向 /user/:id 的 get 請求定義了兩個路由。第二個路由雖然不會帶來任何問題,但卻永遠不會被呼叫,因為第乙個路由已經終止了請求-響應迴圈。

// 乙個中介軟體棧,處理指向 /user/:id 的 get 請求

(req, res, next) , function

(req, res, next) );

// 處理 /user/:id, 渲染乙個特殊頁面

(req, res, next) );

路由級中介軟體和應用級中介軟體一樣,只是它繫結的物件為express.router()

var router =express.router();
路由級使用router.use()router.verb()載入。

上述在應用級建立的中介軟體系統,可通過如下**改寫為路由級:

var router = express.router();

// 沒有掛載路徑的中介軟體,通過該路由的每個請求都會執行該中介軟體

router.use(function

(req, res, next) );

// 乙個中介軟體棧,顯示任何指向 /user/:id 的 http 請求的資訊

router.use('/user/:id', function

(req, res, next) , function

(req, res, next) );

// 乙個中介軟體棧,處理指向 /user/:id 的 get 請求

router.get('/user/:id', function

(req, res, next) , function

(req, res, next) );

// 處理 /user/:id, 渲染乙個特殊頁面

router.get('/user/:id', function

(req, res, next) );

// 將路由掛載至應用

錯誤處理中介軟體有 4 個引數,定義錯誤處理中介軟體時必須使用這 4 個引數。即使不需要next物件,也必須在簽名中宣告它,否則中介軟體會被識別為乙個常規中介軟體,不能處理錯誤。

錯誤處理中介軟體和其他中介軟體定義類似,只是要使用 4 個引數,而不是 3 個,其簽名如下: (err,req,res,next)。

(err, req, res, next)

);我之前在 《深入理解express框架》裡 也提到在 4.x 版本中,express 已經不再依賴 connect。除了 express.static,express 以前包括的中介軟體現在已經在乙個單獨的庫里,請參考 中介軟體列表 。

express.staticexpress唯一內建的中介軟體,它基於serve-static,負責在express應用中提供靜態資源。

引數root指提供靜態資源的根目錄。可選的options引數擁有如下屬性。

下面的例子使用了express.static中介軟體,其中的options物件經過了精心的設計。

var options = 

}

每個應用可有多個靜態目錄。

express是一款提供路由和中介軟體的 web 框架,但其本身的功能卻異常精簡。express應用的功能通過第三方中介軟體來新增。安裝所需功能的node模組,並在應用中載入,可以在應用級載入,也可以在路由級載入。下面的例子安裝並載入了乙個解析cookie的中介軟體:cookie-parser

$ npm install cookie-parser
var express = require('express');

var cookieparser = require('cookie-parser');

// 載入 cookie 解析中介軟體

@參考

@參考 使用中介軟體

深入理解redux中介軟體

摘自 please call me hr redux middleware 是 redux 的乙個 advanced feature.這個概念並不是很新奇,以為在 koa 裡面早已經實現過了.對比與原生的redux middleware koa 的 middleware 差不多相當於是爸爸級的 le...

express中介軟體的理解

參考 express中介軟體分為三種內建中介軟體 自定義中介軟體 第三方中介軟體 express內建中介軟體 express.static 是express目前唯一內建的乙個中介軟體。用來處理靜態資源檔案.2.express自定義中介軟體 中介軟體使用時的第二個引數是乙個function req,r...

express 中介軟體的理解

乙個請求傳送到伺服器,要經歷乙個生命週期,服務端要 監聽請求 解析請求 響應請求,伺服器在處理這一過程的時候,有時候就很複雜了,將這些複雜的業務拆開成乙個個子部分,子部分就是乙個個中介軟體。對於處理請求來說,在響應發出之前,可以對請求和該級響應做一些操作,並且可以將這個處理結果傳遞給下乙個處理步驟 ...