中間件存在於許多框架中。Express中間件將壹個大的請求處理器分成幾個小的部分進行處理。中間件可以邏輯地控制請求、響應對象,從而返回期望的結果。
Express使用app.use()的方法將中間件添加到中間件棧中形成函數數組,使用FIFO(先進先出)依次處理數據。
使用服務器的NodeJS框架,從客戶端發起請求到收到響應的過程大致如下:
當中間件堆棧完成處理時,它要麽生成壹個錯誤並退出,要麽調用res.end()方法,或者res.send()和res.sendfile()方法(這兩個方法自動調用res.end()方法)。
最常見的中間件形式有:
最後壹個中間件‘next’可以省略,例如它不匹配路由,返回404:
以下示例用於編寫兩個中間件,壹個用於日誌記錄,另壹個用於發送文件:
當然也可以用第三方提供的morgan中間件來代替上面的日誌中間件和express自帶的express.static()來代替文件的發送。上面的例子可以改寫為:
它的簽名是:
如果進入錯誤模式,其他正常中間件不會處理,所以壹般的錯誤處理放在最後,就像《無極》裏的‘catch’。
給next()添加壹個參數,通常是壹個錯誤對象,可以進入錯誤模式:
示例:
在前壹章中,我們簡要介紹了路由。簡單來說,路由就是:URL+HTTP請求動作(' get ',' post ',' put ',' delete ')...)->相應的響應處理函數。
現在我們將更詳細地介紹路由,例如靜態文件路由問題和路由器的使用。
在前壹章中,我們討論了三種路徑匹配方式:字符串、字符串模板和正則表達式。這裏有幾個例子:
我們來談談屬性req.params:
使用命名路由參數時,此屬性是壹個對象,如“/user/:name”,而“name”是“req.params”對象的壹個屬性。
使用正則表達式定義路由路徑時,可以通過' req.params[n]'獲得捕獲的組:
在搜索引擎中查詢,經常會遇到這種形式的路由'/搜索?Q=javascript20%tutorials ',可以通過以下途徑處理:
使用req.query獲取查詢字符串:
路由器是中間件和路由的獨立實例。您可以將壹個大型應用程序拆分成許多小型應用程序。每個express應用程序都有內置的應用程序路由器。
使用express實例化路由器。路由器()
主應用程序:
路由器:
路由器有幾種方法,如下所述:
可選參數用於定義路由器的行為。有三個可選參數:
這種方法類似於路由器。方法(),除了它匹配所有HTTP請求操作(' GET ',' POST ')...).
對於指定路徑下的全局邏輯非常有用,比如:
返回單個路由實例,可以在鏈中調用該實例以避免重復。
以下情況:
1.例如,我們參觀了www.example.com/dog.jpg'',現在我們想通過www.example.com/gallery/dog.jpg''.,我們可以通過以下方式。
2.多個靜態文件路徑。有時文件可能在不同的文件夾中。我們可以多次調用' express.static()'方法來添加靜態文件的位置。
這種情況可能以下列方式存在:
3.以上第四種情況可以通過以下方式解決。
現在用戶可以同時獲得'/public '和'/uploads '資源,比如'/public/cat.png '和'/uploads/dog.png '
HTTPS增加了壹層安全協議(TSL(優於ssl)或SSL)。
通俗解釋:每個設備都有壹個公鑰(google稱之為CAs之類的證書)和壹個私鑰,發送信息,用私鑰加密,對方接收信息,用公鑰識別,然後用自己的私鑰解密。
為了使用HTTPS,需要執行以下步驟:
本章主要詳細介紹中間件的工作原理和定義形式;使用路由時的壹些方法,如何使用路由器將app劃分成小app,路由器API常用的壹些方法。最後,我們大致講了如何使用https模塊,如何處理https協議。
2065438+2007年3月20日19:40:57