前面的文章裡也介紹過了,express 是乙個簡潔、靈活的node.js
web 應用開發框架, 它提供一系列強大的特性,幫助你建立各種 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.static
是express
唯一內建的中介軟體,它基於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 中介軟體的理解
乙個請求傳送到伺服器,要經歷乙個生命週期,服務端要 監聽請求 解析請求 響應請求,伺服器在處理這一過程的時候,有時候就很複雜了,將這些複雜的業務拆開成乙個個子部分,子部分就是乙個個中介軟體。對於處理請求來說,在響應發出之前,可以對請求和該級響應做一些操作,並且可以將這個處理結果傳遞給下乙個處理步驟 ...